Этого треда уже нет.
Это копия, сохраненная 12 апреля 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
33 Кб, 500x500
157 Кб, 1024x683
34 Кб, 650x384
187 Кб, 853x480
Давайте изучать PHP #46 #449425 В конец треда | Веб
Добро пожаловать. В этом треде мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

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

- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- Если ты все их решил, переходи к Symfony 2/Doctrine 2

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

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

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

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

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

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

- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

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

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

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

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

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

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

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

PSR-1: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-2-coding-style-guide.md
sage #3 #449428
как вернуть строку из функции?
алсо посоветуйте хорошую книжку по паттернам
#4 #449429
>>449428

Мартин Фаулер. Шаблоны корпоративных приложений Patterns of Enterprise Application Architecture

Не для начинающих.
#5 #449444
ОП, заведи себе трипкод, а?
#6 #449470
Есть форма для поиска, в поля которой возвращаются значения, указанные при предыдущем поиске (я в прошлом треде еще спрашивал, как это сделать). Но теперь не работает Input type ="reset", точнее, работает, но не очищает значения, а возвращает те, которые были при открытии формы, то есть опять те же самые. Как это обойти?
#7 #449473
>>449470
Да, и в догонку:
>>448626
Оно не работает с русскими символами. Что делать?
#8 #449475
>>449473

>Оно не работает с русскими символами. Что делать?


Вру, все оно там работает, проблема в другом. В массиве чекбоксов значения всегда принадлежат одним и тем же ключам, а в списке с селектами нифига не так, там в зависимости от того, сколько и какие позиции выбраны, поэтому и не совпадает.
#9 #449476
А node.js может полностью заменить PHP? Дело в том, что мне надо пилить сайт, а я не знаю ни того, ни того. Но, так как знаю JavaScript, думаю ноду будет выучить проще. Это реально?
#10 #449477
>>449475
Короче, есть какой-нибудь способ указать одной переменной "любое из значений массива" или надо через foreach делать?
#12 #449482
>>449479
Это не то. Алсо, с чекбоксами такая же ситуация. С форич работает, но если открывать форму с нуля, без предыдущего поиска, то выходят ошибки.
#13 #449484
>>449477
$a = $array[mt_rand(0, count($array)];
#14 #449488
>>449484
Уже сделал через форич, вроде все работает теперь как надо.
#15 #449503
>>449402

>Почему исплоьзуешь такой странный способ скрытия? Почему не display none?


А как иначе мне их скрывать? Мне ведь нужно, чтобы 4 разных блока были в одном и том же месте, без абсолютной позиции они будут идти друг за другом. Display none ведь не убирает их из общего потока?

>Это лучше сделать через классы. Тогда мы можем сделать несколько блоков с табами на странице.


Ты имеешь ввиду свой класс для каждого блока?
#16 #449504
>>449402

>Кроме переходов (transiotion), в CSS есть покадровая (keyframe) анимация, читал про нее? Надо хотя бы знать что это такое.


Я хотел сделать через неё, вместо transitio, но она после проигрыша возвращается в исходное положение. Я не нашел в документации как это исправить.
#17 #449505
>>449503

> Display none ведь не убирает их из общего потока?


убирает. Это visibility hidden не убирает.

> Ты имеешь ввиду свой класс для каждого блока


Вмето #tab-1 сделать .tab-1
17 Кб, 743x271
#18 #449506
Ох лол. Не понимаю я их. Сначала говорят мне, что данных, которые я им предоставил недостаточно, а на мой вопрос в сапорт, чего им не хватает молчат. А теперь вот присылают наконец. Не знаю, правда, зачем она мне, но пусть будет.
#19 #449508
>>449503

А, хотя в случае если мы уберем id, мы не сможем связать label и input. Если нет вариантов как убрать id, можешь их оставить.

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

Есть еще такая статья про верстку табов,там интересный подход: http://chikuyonok.ru/2009/04/dl-tabs/
#20 #449509
>>449504

Гугл говорит что есть свойство

animation-fill-mode:forwards

оно не поможет? Ну и в твоем случае конечно переходы больше подходят.
#21 #449510
>>449509
Да, вроде оно. Но мне все равно transition больше нравится, оно как-то удобней.
#22 #449512
>>449503

Еще помни что добавление или убирание display none убирает переходы. Потому для анимации оно может не подойти. Я тебе скидывал статью, там использовался интересный хак с max-height для скрытия элементов. Не факт конечно что он тебе подойдет.
#23 #449514
>>449503

И почитай статью (хотя бы примеры посмотри), там за счет простых переходов довольно сложные анимации делают:

http://css3.bradshawenterprises.com/transitions/
http://css3.bradshawenterprises.com/animations/
http://css3.bradshawenterprises.com/cfimg/
#24 #449516
>>449498

> нормально исправил, или это на костыль похоже?


Не нормально. Ты мог бы поменять <= на < а вместо этого нагородмл переменных. А еще лучше, использовать foreach
#25 #449519
Вопрос о многоуровневых комментариях. Как их записывать понятно, поделитесь инфой о собственно верстке - как правильно эту "лесенку" делать?
someApprentice #26 #449520
http://ideone.com/JbFbD9

Что не так?
sage #27 #449521
>>449520
рнр
#28 #449524
>>449425
Если у кого-то есть интересные статьи и публикации (видео) по PHP

Поделитесь пожалуйста.
То что на хабре - 90% мутная херня.

(Интересует реализация каких-нибудь алгоритмов, возможно решение каких-то задач и прочее)
#29 #449531
Ребят , сорян , у меня совсем энтри вопрос.
Вот смотрите я начитался
http://www.phpinfo.su/articles/practice/shablony_v_php.html
Пишу:
<?php
$a = isset($_GET['a']) && is_numeric($_GET['a']) ? $_GET['a'] : 10;
$b = isset($_GET['b']) && is_numeric($_GET['b']) ? $_GET['b'] : 20;
$result = $a + $b;
include('template.html');
?>
в этой же директории лежит templates.html у которого в body:
<?php if ($result): ?>
<span style="color:blue; font-weight:bold">Результат: <?=$result?></span>
<? else: ?>
<span style="color:red; font-weight:bold">Результат равен нулю</span>
<? endif; ?>

Я вызываю php файл , выдает пустое бело окно , вызываю шаблон , выдает слово результат без самых цифр. где я дурак?
#30 #449533
>>449520
После анонимной функции надо ставить точку с запятой.
someApprentice #31 #449534
>>449533
Спасибо
#32 #449543
>>449519

Есть 2 варианта.

- вкладывать дочерние внутрь родителя:

<li>
текст
<ul>
<li>дочерний коммент</li>
...

- ставить классы или добавлять отступы через атрибут style

<div class="comment-level-1"> ...</div>
<div class="comment-level-2"> ...</div>
<div class="comment-level-3"> ...</div>

Второе сделать легче, а в первом легче скрывать/ракрывать ветки например.
someApprentice #33 #449545
Еще вопрос.
Как правильно написать функцию которая принимает колбек?
Например, как надо написать мою функцию чтобы она вернула массив с нулем?
http://ideone.com/JbFbD9

Я никак не могу нагуглить.
someApprentice #34 #449546
>>449545
Разобрался. Всем спасибо ^_^
someApprentice #35 #449548
>>449546
http://ideone.com/JbFbD9
Правильно же делаю?
#36 #449550
>>449543
Спасибо.
Но тут проблема с записью комментов пока, лол. Короче, суть такова: на страничке вызывается инклюдом форма для добавления коммента, откуда через POST данные передаются в action.php, который, собственно, и добавляет коммент в базу и через header("Location: /page.php?id="); переходит опять на первоначальную страничку.
Во-первых, не могу понять, как передать родительский айди (то есть к какой страничке относится коммент). В форму вставить какой-нибудь неотображаемый элемент, приравненый этому айди или как-то проще это делается? И второе - собственно в header("Location: /page.php?id="); как-то можно вставить айди? Конкатенация не работает.
#37 #449552
>>449550

>И второе - собственно в header("Location: /page.php?id="); как-то можно вставить айди? Конкатенация не работает.


Я тупой, все там работает. Но с первым вопросом по-прежнему непонятно.
#38 #449555
>>449552

>Но с первым вопросом по-прежнему непонятно.


Сделал через hidden. Я у мамы молодец?
115 Кб, 1668x881
#39 #449556
http://jsfiddle.net/ajm805md/
Сделал вот так. С max-height хаком полная херня получается(пикрелейтед), он ведь не убирает блоки из общего потока, а это опять возвращает нас к использованию абсолютного позиционирования.
#40 #449557
Ребята, если задрочить эту тему, то можно стать успешным, хоть немного? Кое-что помню по этой теме еще.
#41 #449558
>>449557
Ты опять выходишь на связь?
#42 #449559
Кротаны, поясните ха XML стоит ли уделять ему время? Насколько важная вещь вообще и насколько нужна для попадания на вакансию джуниора?
#43 #449566
Посоветуйте форум php, где более-менее живое обсуждение (если такие существуют).
Вот хочется иногда совета, а не у кого спросить.
ОПа на всех не хватает, да и он занимается в основном с новичками по своему задачкнику.
Мне бы вот хотелось проконсультироваться по проектированию БД.
#44 #449572
По моему годнота в дополнение к мануалу
Я бы в шапку добавил
http://habrahabr.ru/post/141290/
#45 #449574
Антуаны, подскажите по джойну таблицы к самой себе?
У меня есть табличка с товарами, которые могут входить в комплекс товаров - ну там набор посуды, в него входит тарелка-кружка. Соответственно имеем:
id | name | p_id
1 | Комплект посуды | 0
2 | Тарелка | 1
3 | Кружка | 1

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

Мне нужно:
1) Получить все комплекты
2) Получить товары, не входящие в комплекты

Я вижу решение через подзапрос
SELECT * FROM prod WHERE prod.id IN (SELECT DISTINCT p_id FROM prod)
ну и NOT IN для второго.

Есть вариант через джойны добиться того же результата?
#46 #449579
>>449558
Нет, а ты непосредственно кто?
#47 #449585
>>449579
Не знаю, но вчера такой же вопрос задавали.
#48 #449588
>>449574
Так просто SELECT * FROM prod WHERE prod.p_id = 0;
Это будут либо комплекты, либо товары вне комплектов, не?
246 Кб, 1029x340
#49 #449626
>>449556

> С max-height хаком полная херня получается(пикрелейтед), он ведь не убирает блоки из общего потока


Пусть не убирает. Если у блока нулевая высота то он ведь все равно ни на что не влияет?

У тебя на картинке просто padding/border/margin не убраны (неужели ты этого не видишь?). Надо либо обнулять их, либо засунуть блок внутрь обертки на которой мы ставим overflow hidden и max-height 0, тем самым полностью скрывая содержимое.

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

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

Ей-богу, очень неудобно так учиться. Пошел на гугл, полчаса листал какие-то левые статьи. Или вообще не по теме, или непонятно, или не совсем то.
...
Вот нашел на каком-то мертвом форуме запись от 2002 года, что используется какая-то системная переменная @@identity, которая выхватывает последнюю запись, над которой проводилась операция:
SELECT @@identity as ID
А, нет, это вообще по серверу MSSql.
...
Вот есть метод PDO::lastInsertId, он возвращает айди последней записи. Так, поправьте если неправильно. Попробую родить:

$bookName = $_POST['book'];
$authorName = $_POST['author'];

$db = new PDO($dsn, $user, $pass);
$sql = "INSERT INTO book (name) VALUE (?)";
$sth = $db->prepare($sql);
$sth->bindParam('s', $bookName);
$sth->execute();
$lastBookID = $db->lastInsertId();

$sql = "INSERT INTO author (name) VALUE (?)";
$sth = $db->prepare($sql);
$sth->bindParam('s', $authorName);
$sth->execute();
$lastAuthorID = $db->lastInsertId();

$sql = "INSERT INTO book_author (book_id, author_id) VALUE (?, ?)";
$sth = $db->prepare($sql);
$sth->bindParam('ii', $bookName, $authorName);
$sth->execute();
#50 #449628
Как организовать вставку в таблицы, если связь многие ко многим?
Допустим, нужно создать базу книг, где одну книгу может написать коллектив авторов, и у одного автора много книг.
Кажется, нужно сначала заинсертить в таблицу книг ее название и др.свойства, потом автора в его таблицу (если его там еще нет), а потом уже каким-то непонятным образом вынуть эти два айдишника и поставить их в результирующую таблицу.

Ей-богу, очень неудобно так учиться. Пошел на гугл, полчаса листал какие-то левые статьи. Или вообще не по теме, или непонятно, или не совсем то.
...
Вот нашел на каком-то мертвом форуме запись от 2002 года, что используется какая-то системная переменная @@identity, которая выхватывает последнюю запись, над которой проводилась операция:
SELECT @@identity as ID
А, нет, это вообще по серверу MSSql.
...
Вот есть метод PDO::lastInsertId, он возвращает айди последней записи. Так, поправьте если неправильно. Попробую родить:

$bookName = $_POST['book'];
$authorName = $_POST['author'];

$db = new PDO($dsn, $user, $pass);
$sql = "INSERT INTO book (name) VALUE (?)";
$sth = $db->prepare($sql);
$sth->bindParam('s', $bookName);
$sth->execute();
$lastBookID = $db->lastInsertId();

$sql = "INSERT INTO author (name) VALUE (?)";
$sth = $db->prepare($sql);
$sth->bindParam('s', $authorName);
$sth->execute();
$lastAuthorID = $db->lastInsertId();

$sql = "INSERT INTO book_author (book_id, author_id) VALUE (?, ?)";
$sth = $db->prepare($sql);
$sth->bindParam('ii', $bookName, $authorName);
$sth->execute();
#51 #449629
>>449628

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


И всё это делать внутри транзакции. А ты думал!

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


Ой нинадо нам тут про непонятные образы, а?...
Функции для доступа к СУБД возвращают эти айдишники.
#52 #449630
>>449629

> внутри транзакции


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

>Функции для доступа к СУБД


Если про PDO::lastInsertId, то уже нашел.

>>449628
Фикс очевидных косяков:
$sth->bindParam('s', $bookName);
$sth->bindParam(':name', $bookName, PDO::PARAM_STR);
371 Кб, 643x440
#53 #449633
>>449556

C 3d трансформациями получается забавно тоже получается, шрифт правда ужасно выглядит.
#54 #449636
>>449628

> если связь многие ко многим?


допустим надо вставить пост тегами.

Вставляем теги
Вставляем пост
Вставляем связь между постом и тегами

Все это в рамках транзакции чтобы при ошибке не оставалось записей (ну и вставляется быстрее внутри одной транзакции).
#55 #449639
>>449628

> используется какая-то системная переменная @@identity


Это в MSSQL, в MySQL lastInsertId() есть.
#56 #449641
>>449585
Не знаю, но ответь тогда на мой вопрос.
#57 #449643
>>449630

Транзакции

https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D1%8F_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)

http://php.net/manual/ru/pdo.transactions.php

http://habrahabr.ru/post/238119/

http://shurshun.ru/tranzaktsii-blokirovki-urovni-izoliovannosti-tranzaktsiy-v-mysql/

Заметь что есть уровни изоляции транзакций. Можно ставить более низкий уровень ради более высокой скорости работы.

MyISAM не поддерживает транзакции, InnoDB поддерживает.
#58 #449644
>>449636
>>449629
Но я не понимаю, что такое транзакция!
Переведите с иврита, пожалуйста:

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

Это один запрос? Или совокупность запросов за одно соединение с базой?
>>449643
Спс. Только учти, что если не пойму что там написано, опять вернусь сюда флудить.
#59 #449646
>>449644
Включение семафоров в алфавитном порядке, выполнение всех действий, отключение семафоров в обратном порядке. Читни Таненбаума, как свободное время будет.
#60 #449648
>>449574

Я прокомментирую еще что судя по тому что ты используешь 0 вместо NULl ты не знаешь про внешние ключи. Стыдно.

Прочитай: http://denis.in.ua/foreign-keys-in-mysql.htm
#61 #449651
Ну что, я крутой?
http://ideone.com/aNbowR
sage #62 #449657
>>449651
пиздец как же это пиздато блять ебать
#63 #449658
>>449651
Поставь:
error_reporting (E_ALL | E_STRICT);

И:
set_error_handler ('php_error_handler');

Затем напиши функцию:
function php_error_handler ($errno, $errstr, $errfile, $errline, $vars) {
...
...
}
где лови все ошибки.
#64 #449663
>>449644

Транзакция это группа запросов, которые выполняются как один.

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

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

Изолированность (вроде бы) значит что если пользователь 1 начал транзакцию и делает изменения, не закрыв ее, то эти изменения видит только он, а все остальные видят таблицы как они были до начала транзакции. А когда пользователь 1 закоммитит транзакцию, изменения увидят все.

То есть внутри транзакции пользователь как бы работает со своей отдельной копией базы которую видит только он.

Но формальное определение изолированности такое:

> The isolation property ensures that the concurrent execution of transactions results in a system state that would be obtained if transactions were executed serially, i.e., one after the other.



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



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

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

Вопрос про транзакции и что такое ACID любят задавать на собеседованиях, имей в виду. Я бы разобрался в этой теме, так как заучивать это бесполезно, надо именно понимать концепцию и тогда все будет просто.
#65 #449667
>>449644

> Это один запрос? Или совокупность запросов за одно соединение с базой?



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

Транзакцию ты начинаешь явно командой BEGIN, коммитишь командой COMMIT, откатываешь через ROLLBACK. Ты можешь поэкспериментировать с этим например в командной строке MySQL. Сделать изменение и убедиться что при ROLLBACK оно откатывается. Ну и открыть 2 клиента MySQL и убедиться что один не видит незакоммиченные изменения другого.

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

> если не пойму что там написано, опять вернусь сюда флудить.


Возвращайся конечно.
#66 #449671
>>449658
http://ideone.com/aNbowR

Сделал, всё правильно? Зачем я это сделал?
#67 #449673
>>449644

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

То есть можно сказать что транзакция это операция внесения изменений в базу данных, состоящая из 1 или более запросов и соответствущая в той или иной мере требованиям ACID (эти требования на практике по моему на 100% не выполняются, степень соответствия требованиям, насколько мы близки к идеалу, называется уровень изоляции транзакций).
#68 #449677
>>449671
Затем, чтобы в «php_error_handler()» вызывать «throw new Exception( все параметры )», так-то!
#69 #449679
>>449646

Пришел похвастаться неграмостностью?

> Включение семафоров в алфавитном порядке,


Это средство защиты от дедлоков в некоторых случаях.

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

Анон спросил что такое транзакция, а не просил привести неэффективный пример ее реализации.
#70 #449680
>>449677
Не понимаю, и ты на первый вопрос не ответил. Тип все правильно?
#71 #449688
>>449680
1) Там не заданы аргументы в 41-й строке,
2) У меня обработчик ошибок состоит из одной строки:
throw new Exception ("\n\n".'['.$errno.'] '.$errstr.' ('.strtr ($errfile, '\\', '/').', '.$errline.')'."\n\n");
#72 #449693
>>449688
ну да, теперь не работает.
#73 #449695
>>449693
Оно и раньше «не работало», просто интерпретатор не печатал сообщение об ошибке. А теперь, если он что-то находит, он вызывает обработчик ошибок... почему аффтары Пыха так сделали, никто не знает.
#74 #449704
>>449695
раньше печатал, внизу делал это. Обнови страничку с кодом.
#75 #449708
>>449704
Круто, теперь он выдаёт «Stack trace», ошибка на 64-й строке: метод «summ()» надо вызывать с параметрами.
#76 #449712
>>449708
Да, я понял. Теперь он мне вместо нотисов прям в текст программмы выдает ошибку, но вот про эту строчку не понял
throw new Exception ("\n\n".'['.$errno.'] '.$errstr.' ('.strtr ($errfile, '\\', '/').', '.$errline.')'."\n\n");

Как это то должно работать?
#77 #449721
>>449708
Ну и да, я понимаю же, что туда надо вставлять параметры.

Вот как наебал систему http://ideone.com/aNbowR
#78 #449722
>>449712
Вначале «new Exception()» создаст объект со строкой, где будет «errno», «errstr» и тому подобное. Этот жуткий синтаксис — наследие Перла. А создание нового объекта — пародия на Жаббу, типа мы тоже крутые.
Затем оператор «throw» напечатает цепочку вызовов и строку из объекта.

Параметры надо задать обязательно, раз в заголовке функции так сказано. И вызов «isset» всегда вернёт «true». До него выполнение вообще не доходило, т.к. функция и не вызывалась даже.

isset($b)) {
#79 #449727
>>449651

Что за наркоманский код? Что ты хотел сказать? Из названий классов и функций понять трудно.
#80 #449729
>>449721
Там в обработчике ошибок «isset» тоже не нужен: все переменные будут заданы.
А так — всё верно.
#81 #449731
Прошу помочь. Есть, значит, код. Я хочу его зациклить, чтобы он работал, пока не выпадут 2 дабла. Но, я ламер. Как это можно осуществить? http://ideone.com/m5owm8
#82 #449733
>>449731
while (true) {

здесь вызов функции, проверка и либо "exit" либо ничего

}
#84 #449742
>>449722
Но куда её вствить? если я эту строчку вствляю в обработчик, то тупо фатал еррор.

>>449727
Ну тип как в прописях в первом классе.

>>449729
Не все вроде бы, переделал на !empty и он мне вообще гору инфы сдает теперь.

>>449731

do {
выкидываем 4 кубика
if (поверяем выпали ли два дабла) {
запомнили в переменную если выпали;
}
} while (пока не выпадут даблы)

http://php.net/manual/ru/control-structures.do.while.php
#85 #449746
#87 #449749
>>449742

>Но куда её вствить? если я эту строчку вствляю в обработчик, то тупо фатал еррор.


Но ведь раньше всё работало... он же печатал цепочу вызовов, когда ошибка была.
#88 #449752
>>449749
http://ideone.com/M1QuFL
Работало если закоменчено.
#89 #449754
>>449752
И сейчас работает, поймало что-то на 76-й строке.
#90 #449758
>>449754
Нет, это мне ideone репортит об ошибке, он это делает автоматом же, без всех этих handler'ов, в то время как в коде программы у меня красным выдает error, а в http://ideone.com/aNbowR пишет зелененьким что все хорошо и типа нет ошибок.
#91 #449761
>>449758
Похоже на то, что красную строку «Runtime error» тоже оператор «throw» печатает.
#92 #449763
>>449761
может быть для throw нужен еще и catch в пару где-то?
#93 #449765
>>449763
Здесь я ХЗ, я не использую «catch» в скриптах на Пыхе. Он у меня сразу останавливается и печатает цепочку вызовов, а дальше я нахожу строку в нортонкоммандере и руками исправляю её.
#94 #449766
>>449765
Вся суть питонодебилов
#95 #449769
>>449765
Ну в общем не важно наверное пока, я прост сел учить ООП потихоньку, и типа как вообще с этими сущностями обращаться. Мне нужно гостевуху самописную для практики завернуть в ООП. В принципе уже появились идеи благодаря сегодняшнему посту >>449387 В общем спасибо
#96 #449782
>>449559
Если пилить свистеперделки, то не нужен. В продакшене же пригодится, так как часто используется для хранения различных конфигов. Ну и некоторые апи его используют для респонсов.
someApprentice #97 #449797
>>449394
http://ideone.com/JbFbD9

Правильно ли я применяю статические методы?

Как правильно написать функцию чтобы можно было добавлять заранее неизвестное количество объектов? В мануалах к какой-нибудь функции это обычно пишут так: [, array $... ]

Почему мне не удалось умножить, с помощью анонимной функции, таким образом return $o->type 2;
В мануале по array_map есть пример где анонимная функция возвращает return($n
$n * $n);
http://php.net/manual/ru/function.array-map.php
someApprentice #98 #449799

>http://ideone.com/JbFbD9


Пардон, не ту ссылку дал.
Ideone.com/YYObcB
#100 #449849
Поясните за ограничения (constraint) внешних ключей. Я так понял, что они нужны, чтобы по ошибке не заинсертить несуществующий в справочнике айди?
Ну например если у нас 5 категорий товара с айди 1-5 и мы по ошибке указываем айди 7, которого нет.
Индекс на внешних ключах автоматически не создается? Или это тоже зависит от движка mysql?
#101 #449860
Аноны, почитайте, вот например интересное мнение что джуниоров (то есть вас) набирать выгоднее чем опытных программистов: http://siliconrus.com/2015/03/juniors/

>>449470

Сбрасывать значения яваскриптом либо вместо кнопки сделать ссылку «очистить фильтр».

>>449475

Не понял, но скорее всего проблема в твоем коде.

>>449476

Смотря для чего. Знание яваскрипта != знанию ноды.

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

>>449477

Объясни понятно что тебе нужно. Я даже не понимаю что значит «указать переменной»? В переменную можно только сохранить какое-то значение и все.

>>449482

Потому что у тебя код неправильный.

>>449506

Payoneer это система оплаты, один из вариантов используемых одеском.

Карточка один из способов вывести деньги и насколько я знаю, там довольно неприятная комиссия получается.
#101 #449860
Аноны, почитайте, вот например интересное мнение что джуниоров (то есть вас) набирать выгоднее чем опытных программистов: http://siliconrus.com/2015/03/juniors/

>>449470

Сбрасывать значения яваскриптом либо вместо кнопки сделать ссылку «очистить фильтр».

>>449475

Не понял, но скорее всего проблема в твоем коде.

>>449476

Смотря для чего. Знание яваскрипта != знанию ноды.

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

>>449477

Объясни понятно что тебе нужно. Я даже не понимаю что значит «указать переменной»? В переменную можно только сохранить какое-то значение и все.

>>449482

Потому что у тебя код неправильный.

>>449506

Payoneer это система оплаты, один из вариантов используемых одеском.

Карточка один из способов вывести деньги и насколько я знаю, там довольно неприятная комиссия получается.
#102 #449861
>>449860

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


Уже сам все сделал. Видимо, не стоит сразу писать сюда при каждой проблеме.
#103 #449862
>>449524

> Интересует реализация каких-нибудь алгоритмов, возможно решение каких-то задач


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

>>449531

Что в адресной строке браузера? Как именно ты «вызываешь» php файл?

>>449548

Вроде пока правильно, ты же пишешь аналог array_filter? Я бы исплоьзовал слово filter в названии так как это общепринятое название такой функции и проще догадаться что она делает.

Ну и еще, тебе надо будет проверить все возможные способы передать коллбек, а именно:

- имя функции или статического метода строкой
- имя метода или статического метода массивом
- анонимная функция (это ты сделал)
- объект реализующий магический метод invoke

Надо проверить что все эти вещи передаются и вызываются.
#103 #449862
>>449524

> Интересует реализация каких-нибудь алгоритмов, возможно решение каких-то задач


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

>>449531

Что в адресной строке браузера? Как именно ты «вызываешь» php файл?

>>449548

Вроде пока правильно, ты же пишешь аналог array_filter? Я бы исплоьзовал слово filter в названии так как это общепринятое название такой функции и проще догадаться что она делает.

Ну и еще, тебе надо будет проверить все возможные способы передать коллбек, а именно:

- имя функции или статического метода строкой
- имя метода или статического метода массивом
- анонимная функция (это ты сделал)
- объект реализующий магический метод invoke

Надо проверить что все эти вещи передаются и вызываются.
#104 #449867
>>449550

> как передать родительский айди (то есть к какой страничке относится коммент)


input type=hidden

> вставить какой-нибудь неотображаемый элемент, приравненый этому айди


да

> И второе - собственно в header("Location: /page.php?id="); как-то можно вставить айди? Конкатенация не работает.


Работает. Покажи неработающий код. И сразу второй вопрос, а в echo "id="; как подставить id ты знаешь?

>>449555

да

>>449557

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

>>449559

Иногда используется. На нем могут быть построены API, магазины свои прайс-листы в нем передают часто, так что знать XML и методы работы с ним (и XPath конечно) может быть полезно.

Я не раз с ним сталкивался.

>>449566

Не знаю, попробуй погуглить, а оценить живость общения можно например по числу тем за последний месяц и числу комментариев.
#104 #449867
>>449550

> как передать родительский айди (то есть к какой страничке относится коммент)


input type=hidden

> вставить какой-нибудь неотображаемый элемент, приравненый этому айди


да

> И второе - собственно в header("Location: /page.php?id="); как-то можно вставить айди? Конкатенация не работает.


Работает. Покажи неработающий код. И сразу второй вопрос, а в echo "id="; как подставить id ты знаешь?

>>449555

да

>>449557

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

>>449559

Иногда используется. На нем могут быть построены API, магазины свои прайс-листы в нем передают часто, так что знать XML и методы работы с ним (и XPath конечно) может быть полезно.

Я не раз с ним сталкивался.

>>449566

Не знаю, попробуй погуглить, а оценить живость общения можно например по числу тем за последний месяц и числу комментариев.
#105 #449868

>>449572

Первый же коммент с хабра:

> Такое ощущение, что сейчас это тред – учиться проходить собеседования, а не программировать. Знать ответы на вопросы собеседования, но не применить их на практике ни разу.


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



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

Ну и вопросы странные.

> Что такое конструктор?


По моему любой, изучавший ООП знает этот ответ. А не изучавший вряд ли пройдет собеседование.

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

Ну и у меня тоже есть сборник задачек с собеседований. Собрано из постов анонов, если вы можете чем-то дополнить, присылайте мне задачки. Вот ссылка: https://github.com/codedokode/pasta/blob/master/interview-tasks.md

это чушь:

> Что работает быстрее: преинкремент или постинкремент?


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



такие утверждения должны подтвержаться ссылкой на исходники php. Или хотя бы измерениями. Если бы я собеседовал человека и он такое сказал, я бы попросил чемм это подтверждается. «прочитал в интернете» разумеется не ответ :) Если бы мне задали такой вопрос, я бы сказал что не знаю, и надо сделать измерения, но интуиция подсказввает что разница если и есть то очень маленькая.

> В двойных кавычках данные “парсятся”


Это называется интерполяция строк и не надо придумывать свои названия

> Нужно определить длину строки функцией strlen(). Откуда она узнает


сколько в строке символов?
Плохой вопрос. Откуда новичок знает про устройство zval? максимум что он должен знать, что длина где-то хранится и ее получение это O(1).

> Как вывести все элементы массива на экран?


echo implode

> Что такое ассоциативный массив?


> Массивы, индексами которых являются строки, называются ассоциативными.


Неверно. https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2

Ассоциативный массив это массив в котором ключи могут быть любыми числами или строками (или даже другими типами, если речь не о PHP), в отличие от «обычного» массива или вектора (термин из С++) где ключи являются числами от 0 до N и идут по возрастанию.

> Нарисуй форму для отправки файла:


Есть функция move_uploaded_file, она специально для загрузки файлов сделана.

> Требуется создать для данной HTML-формы скрипт-обра-


ботчик, который заносит построчно в файл result.txt полученные данные.

> if (!$handle = fopen($files, ‘a’)) {


Старье. Проще использовать file_put_contents

ну и такие примеры кода конечно выглядят ужасно:

> if($v % 5 == 0) echo $v.’</br>’;


Никто не говорил что код будет запускаться через браузер. Ну и смесь php c html плохо смотрится.

> Есть массив a = array(тут много элементов). Проходим по массиву циклом


for (i=0; i<=count(a); i++). Можно ли как-нибудь ускорить цикл?
дебильный вопрос про микрооптимизаию без пруфов.

Алсо я бы добавил ответ 3) использовать HipHop (или Си++) например

> Какая функция возвращает количество рядов результата MySQL запроса?


> mysql_num_rows().


Устарела

> Какие паттерны знаешь?


Этот вопрос глупо задавать так как в 90% случаев человек без опыта про эти паттерны только в книжках читал и на практике не сталкивался (хотя если изучать фреймворки вроде Symfony 2 то можно столкнуться).

Ну и сомневаюсь что такой ответ поможет новичику:

> Memento (Хранитель). Паттерн поведения объектов, сохраняющий состояни



Так как после этого его попросят проиллюстрировать это кодом.

> Полиморфизм. Это свойство, которое позволяет одно и тоже имя использовать для решения нескольких технически разных задач.


Одно и то же имя?

> Что такое виртуальный метод?


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

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


> Public. Метод/переменная доступны из любого места в коде.


Тут путают понятия scope (область видимости переменной) и access (модификатор доступа у полей класса)

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


То же самое, бред

> . Интерфейс – такой же абстрактный класс, только в нем не может


быть свойств и не определены тела у методов.
Интерфейс это не класс. В вики https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) пишут:

> Интерфе́йс — семантическая[источник не указан 478 дней] и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом.



Мануал php ( http://php.net/manual/ru/language.oop5.interfaces.php ) говорит:

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



> Кроме того, что абстрактный класс наследуется (etxends), а интерфейс реализуется (implements).


Не хочу огорчать, но интерфейсы тоже наследуются. Например мы можем сделать интерфейс Likeable для сущностей которым можно ставить лайки (пост, комментарий), а также interface Dislikeable extends Likeable для сущностей которые можно вдобавок минусовать.

> Зачем нужен интерфейс, если есть абстрактный класс?


затем что это разные вещи и абстрактным классом нельзя описать требования к (или умения) объекту.

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

> Приведи пример наследования в JavaScript.


Куча неправильного кода.

> Первичный ключ (primary key) – столбец, значения которого во всех строках различны


Неправильно. Первычный ключ это поле, идентифицирующее строку (вроде номера паспорта). То что оно уникально это следствие.

> MyISAM


> – в большинстве случаев он быстрее, так как нет расходов на транзакции;


источник?

> Чем отличается WHERE от HAVING?


тем что первое применяется до группировки а второе после

> . Что делает свойство clear?


> Устанавливает, с какой стороны элемента запрещено его обтекание другими элементами. Если задано обтекани


Не очень правильно. Как можно запретить «обтекание»? clear добавляет элементу отступ (margin) сверху так, чтобы элемент оказался ниже чем флоаты.

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


применен стиль float: left; на третий: float: right; что нужно применить на вто-
рой див, чтобы все три надписи/дивы были в одной горизонтальной строке,
т.е. первый имел бы выравнивание по левому краю, третий по правому, а вто-
рой по центру?

text-align: center;

> В чем вообще смысл jQuery? Зачем оно надо?


> Суть jQuery в том, чтобы отбирать элементы HTML-страниц и выполнять над ними определенные действия.


Какой вопрос, такой ответ...

В общем, почитать эту книжку можно, но заучивать то, что там написано, не стоит.
#105 #449868

>>449572

Первый же коммент с хабра:

> Такое ощущение, что сейчас это тред – учиться проходить собеседования, а не программировать. Знать ответы на вопросы собеседования, но не применить их на практике ни разу.


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



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

Ну и вопросы странные.

> Что такое конструктор?


По моему любой, изучавший ООП знает этот ответ. А не изучавший вряд ли пройдет собеседование.

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

Ну и у меня тоже есть сборник задачек с собеседований. Собрано из постов анонов, если вы можете чем-то дополнить, присылайте мне задачки. Вот ссылка: https://github.com/codedokode/pasta/blob/master/interview-tasks.md

это чушь:

> Что работает быстрее: преинкремент или постинкремент?


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



такие утверждения должны подтвержаться ссылкой на исходники php. Или хотя бы измерениями. Если бы я собеседовал человека и он такое сказал, я бы попросил чемм это подтверждается. «прочитал в интернете» разумеется не ответ :) Если бы мне задали такой вопрос, я бы сказал что не знаю, и надо сделать измерения, но интуиция подсказввает что разница если и есть то очень маленькая.

> В двойных кавычках данные “парсятся”


Это называется интерполяция строк и не надо придумывать свои названия

> Нужно определить длину строки функцией strlen(). Откуда она узнает


сколько в строке символов?
Плохой вопрос. Откуда новичок знает про устройство zval? максимум что он должен знать, что длина где-то хранится и ее получение это O(1).

> Как вывести все элементы массива на экран?


echo implode

> Что такое ассоциативный массив?


> Массивы, индексами которых являются строки, называются ассоциативными.


Неверно. https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2

Ассоциативный массив это массив в котором ключи могут быть любыми числами или строками (или даже другими типами, если речь не о PHP), в отличие от «обычного» массива или вектора (термин из С++) где ключи являются числами от 0 до N и идут по возрастанию.

> Нарисуй форму для отправки файла:


Есть функция move_uploaded_file, она специально для загрузки файлов сделана.

> Требуется создать для данной HTML-формы скрипт-обра-


ботчик, который заносит построчно в файл result.txt полученные данные.

> if (!$handle = fopen($files, ‘a’)) {


Старье. Проще использовать file_put_contents

ну и такие примеры кода конечно выглядят ужасно:

> if($v % 5 == 0) echo $v.’</br>’;


Никто не говорил что код будет запускаться через браузер. Ну и смесь php c html плохо смотрится.

> Есть массив a = array(тут много элементов). Проходим по массиву циклом


for (i=0; i<=count(a); i++). Можно ли как-нибудь ускорить цикл?
дебильный вопрос про микрооптимизаию без пруфов.

Алсо я бы добавил ответ 3) использовать HipHop (или Си++) например

> Какая функция возвращает количество рядов результата MySQL запроса?


> mysql_num_rows().


Устарела

> Какие паттерны знаешь?


Этот вопрос глупо задавать так как в 90% случаев человек без опыта про эти паттерны только в книжках читал и на практике не сталкивался (хотя если изучать фреймворки вроде Symfony 2 то можно столкнуться).

Ну и сомневаюсь что такой ответ поможет новичику:

> Memento (Хранитель). Паттерн поведения объектов, сохраняющий состояни



Так как после этого его попросят проиллюстрировать это кодом.

> Полиморфизм. Это свойство, которое позволяет одно и тоже имя использовать для решения нескольких технически разных задач.


Одно и то же имя?

> Что такое виртуальный метод?


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

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


> Public. Метод/переменная доступны из любого места в коде.


Тут путают понятия scope (область видимости переменной) и access (модификатор доступа у полей класса)

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


То же самое, бред

> . Интерфейс – такой же абстрактный класс, только в нем не может


быть свойств и не определены тела у методов.
Интерфейс это не класс. В вики https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) пишут:

> Интерфе́йс — семантическая[источник не указан 478 дней] и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом.



Мануал php ( http://php.net/manual/ru/language.oop5.interfaces.php ) говорит:

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



> Кроме того, что абстрактный класс наследуется (etxends), а интерфейс реализуется (implements).


Не хочу огорчать, но интерфейсы тоже наследуются. Например мы можем сделать интерфейс Likeable для сущностей которым можно ставить лайки (пост, комментарий), а также interface Dislikeable extends Likeable для сущностей которые можно вдобавок минусовать.

> Зачем нужен интерфейс, если есть абстрактный класс?


затем что это разные вещи и абстрактным классом нельзя описать требования к (или умения) объекту.

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

> Приведи пример наследования в JavaScript.


Куча неправильного кода.

> Первичный ключ (primary key) – столбец, значения которого во всех строках различны


Неправильно. Первычный ключ это поле, идентифицирующее строку (вроде номера паспорта). То что оно уникально это следствие.

> MyISAM


> – в большинстве случаев он быстрее, так как нет расходов на транзакции;


источник?

> Чем отличается WHERE от HAVING?


тем что первое применяется до группировки а второе после

> . Что делает свойство clear?


> Устанавливает, с какой стороны элемента запрещено его обтекание другими элементами. Если задано обтекани


Не очень правильно. Как можно запретить «обтекание»? clear добавляет элементу отступ (margin) сверху так, чтобы элемент оказался ниже чем флоаты.

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


применен стиль float: left; на третий: float: right; что нужно применить на вто-
рой див, чтобы все три надписи/дивы были в одной горизонтальной строке,
т.е. первый имел бы выравнивание по левому краю, третий по правому, а вто-
рой по центру?

text-align: center;

> В чем вообще смысл jQuery? Зачем оно надо?


> Суть jQuery в том, чтобы отбирать элементы HTML-страниц и выполнять над ними определенные действия.


Какой вопрос, такой ответ...

В общем, почитать эту книжку можно, но заучивать то, что там написано, не стоит.
#106 #449872
>>449572

> HTML5 знаешь? Нарисуй что-нибудь


> <rect x=”100” y=”100” width = “300” heigh


Это SVG а не HTML5

Ну и комменты на хабре жгут конечно:

> Вывести только те магазины, которые находятся во Львове и/или Харькове:


> SELECT × FROM shops WHERE area=”Львов” AND area=”Харьков



и

> что выведет на экран $i++ -$i-- × ++$j


> Оно выведет из себя программиста, поддерживающего этот говнокод.



Я советую вместо этой книги прочесть мануал php и замечательный сайт phptherigthway: http://getjump.github.io/ru-php-the-right-way/
#107 #449873
>>449695
>>449704

ideone не пишет ошибки если ты исплоьзуешь кнопку Ideone it. Надо страницу обновить чтобы их увидеть.

> почему аффтары Пыха так сделали, никто не знает.


Исторически там не было исключений (и ООП в принципе), наверно по этому. bash тоже по умолчанию при любой ошибке как ни в чем не бывало продолжает выполнять скрипт. К счастью, set -e его лечит от этой дурной привычки. надеюсь в будущем и мы перейдем на исключения only.

>>449712

Это вообще писать не надо было, надо было на ideone страницу обнвоить. Не знаю зачем ты это сделал.

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

> Этот жуткий синтаксис — наследие Перла.


Это удобный синтаксис, который не так давно портировали в яваскрипт ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings ), который есть в Руби и которого нет в Питоне, Java и других языках.

> А создание нового объекта — пародия на Жаббу


ООП не в Java придумали. И ООП и исключения были и раньше, например в Си++.

> Затем оператор «throw» напечатает цепочку вызовов и строку из объекта.


Он лишь выкидывает исключение и ничего не печатает.

>>449742

> если я эту строчку вствляю в обработчик, то тупо фатал еррор.


Ну так исправь код.

>>449758

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

>>449769

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

А если тебя интересуют исключения, у меня есть урок и про них: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a
#107 #449873
>>449695
>>449704

ideone не пишет ошибки если ты исплоьзуешь кнопку Ideone it. Надо страницу обновить чтобы их увидеть.

> почему аффтары Пыха так сделали, никто не знает.


Исторически там не было исключений (и ООП в принципе), наверно по этому. bash тоже по умолчанию при любой ошибке как ни в чем не бывало продолжает выполнять скрипт. К счастью, set -e его лечит от этой дурной привычки. надеюсь в будущем и мы перейдем на исключения only.

>>449712

Это вообще писать не надо было, надо было на ideone страницу обнвоить. Не знаю зачем ты это сделал.

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

> Этот жуткий синтаксис — наследие Перла.


Это удобный синтаксис, который не так давно портировали в яваскрипт ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings ), который есть в Руби и которого нет в Питоне, Java и других языках.

> А создание нового объекта — пародия на Жаббу


ООП не в Java придумали. И ООП и исключения были и раньше, например в Си++.

> Затем оператор «throw» напечатает цепочку вызовов и строку из объекта.


Он лишь выкидывает исключение и ничего не печатает.

>>449742

> если я эту строчку вствляю в обработчик, то тупо фатал еррор.


Ну так исправь код.

>>449758

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

>>449769

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

А если тебя интересуют исключения, у меня есть урок и про них: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a
#108 #449874
>>449769

> Мне нужно гостевуху самописную для практики завернуть в ООП.


У нас есть хорошее задание сделать список студентов с подробными комментариями и разъяснениями. И опять же, я готов его проверить и например сказать где ошибки: https://github.com/codedokode/pasta/blob/master/student-list.md

>>449782

Яндекс маркет его использует например. так что скорее всего пригодится.

>>449797

> Правильно ли я применяю статические методы?


Не вижу ни одного статического метода.

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


RTFM
http://php.net/manual/ru/functions.arguments.php#functions.variable-arg-list
http://php.net/manual/ru/functions.arguments.php#functions.variable-arg-list.old

> Почему мне не удалось умножить, с помощью анонимной функции, таким образом return $o->type 2;


покажи код телепаты в отпуске

>>449800

> class SplObjectFunctions {


Ты бы мог унаследовать SplObjectStorage и таким образом сделать «улучшенную версию» этого класса.

> array('Foo', 'searchZeroType')


Это неправильно. так можно делать если метод статичесикй, но у тебя это не так и надо передавать вместо Foo конкретный объект. Перечитай мануал, там наверно где-то это написано: http://php.net/manual/ru/language.types.callable.php

> return $o->type = $o->type 2; //Почему не получилось c return $o->type 2;


Это неверно. Функция не должна менять объект, она должна только возвращать новое значение.

И по моему я тебе уже это говорил. Я уверен, что говорил:

не объединяй присваивание значения и return. Это 2 разных действия и их надо писать в 2 отдельных строки

> public static function object_map


Это неверно. array_map всегда возвращает новый массив не изменяя старый. А ты возвращаешь тот же самый объект.
#108 #449874
>>449769

> Мне нужно гостевуху самописную для практики завернуть в ООП.


У нас есть хорошее задание сделать список студентов с подробными комментариями и разъяснениями. И опять же, я готов его проверить и например сказать где ошибки: https://github.com/codedokode/pasta/blob/master/student-list.md

>>449782

Яндекс маркет его использует например. так что скорее всего пригодится.

>>449797

> Правильно ли я применяю статические методы?


Не вижу ни одного статического метода.

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


RTFM
http://php.net/manual/ru/functions.arguments.php#functions.variable-arg-list
http://php.net/manual/ru/functions.arguments.php#functions.variable-arg-list.old

> Почему мне не удалось умножить, с помощью анонимной функции, таким образом return $o->type 2;


покажи код телепаты в отпуске

>>449800

> class SplObjectFunctions {


Ты бы мог унаследовать SplObjectStorage и таким образом сделать «улучшенную версию» этого класса.

> array('Foo', 'searchZeroType')


Это неправильно. так можно делать если метод статичесикй, но у тебя это не так и надо передавать вместо Foo конкретный объект. Перечитай мануал, там наверно где-то это написано: http://php.net/manual/ru/language.types.callable.php

> return $o->type = $o->type 2; //Почему не получилось c return $o->type 2;


Это неверно. Функция не должна менять объект, она должна только возвращать новое значение.

И по моему я тебе уже это говорил. Я уверен, что говорил:

не объединяй присваивание значения и return. Это 2 разных действия и их надо писать в 2 отдельных строки

> public static function object_map


Это неверно. array_map всегда возвращает новый массив не изменяя старый. А ты возвращаешь тот же самый объект.
#109 #449876
>>449849

> они нужны, чтобы по ошибке не заинсертить несуществующий в справочнике айди?


да

> Индекс на внешних ключах автоматически не создается?


Создается (в MySQL) так как без него проверка будет медленно работать. Индекс останется даже если удалить FOREIGN KEY.

Также есть статья http://denis.in.ua/foreign-keys-in-mysql.htm

мануал http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html

> MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist.

#110 #449880
>>449868
Мне это понравилось.

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


Или задаются пространные вопросы типа чем отличается php 5.3 от php 5.2.

Все так, меня один раз спросили зачем нужен HTML, я был немного ошарашен, и ответил какими-то общими словами. После этого я начал готовиться к собеседованиям тщательней, потому что, как оказалось, код, который я писал за время обучения, собеседователей не очень интересует.
#111 #449888
Ньюфаг вкатился.
Все правильно делаю? хотя в таких задачах вряд ли можно запороть что либо
http://ideone.com/ANPFfd
#112 #449889
>>449888
а ты сделай курс доллара еще динамическим.
#113 #449890
>>449889
Я думал об этом, но пока, боюсь, моих знаний не хватит для этого.
#114 #449894
Название переменной - существительное, типа надпись на коробке в которой что-то лежит.
Название функции - глагол, действие над чем-либо.
Название класса - существительное, обобщенное определение для порождаемых объектов.
А интерфейс как называть? Также как класс? Как-то непрозрачно получается. Ведь это не Человек, Собака, Пользователь, а набор функций.
#115 #449898
>>449890
Ну почему же, вот у тебя год растет с каждой итерацией цикла, ты можешь сделать так, что бы и курс доллара рос например вместе с ней, или рандомить изменение курса внутри цикла скажем.
#116 #449903
>>449588
Товар, не входящий в комплекты тоже будет p_id = 0. А нужны комплекты и товары не в комплектах отдельно
#117 #449906
Обычно это глагол + суффикс able. Interface Flyable
{
protected function fly():
}
class Plane implements Flyable
{
protected function fly()
{
//
}
}
#118 #449915
>>449626
http://jsfiddle.net/9u2ezvyL/ Вот, сделал с анимацией.
#119 #449926
Как через компосер правильно подключить yii ?
32 Кб, 483x441
#120 #449932
Сап, пхп не знаю вообще и пишу фо фан.
Пишу код, который работает с апи твитч.тв.

Что мне нужно? Нужно, чтобы пользователь писал свой ник в поле и дальше скрипт (либо дописывал вокруг этого ника шаблон из кода , либо добавлял его в массив $channels = array, а потом дописывал код шаблона для каждого ника измассива)
Собственно я почти все написал, но нужно только вот эту подстановку сделать.

Не знаю, поняли ли вы меня.

http://ideone.com/e.js/Y6ANL4
16 Кб, 400x331
#121 #449933
>>449932
Конкретно как слепить
fwrite($_file, "$channels = array(".$_inkey.") ;"); и код отображения стрима, конкретно нужно всунуть это говно в массив.

Или же сделать fwrite($_file, "вписать сюда весь шаблон отображения") чтобы после вписки ника, появлялся еще один кусок шалона, только уже с введеным ником.
#122 #449934
Еще вопрос про верстку макета. Там много картинок в псд, есть какой-то способ их вытащить оттуда, кроме как каждый слой отдельно вытаскивать в новый холст и сохранять отдельным файлом? Еще там дофига шрифтов, которых у меня нету на харде(как же они отображаются в фотошопе?), что-то я их не заметил в папке с шаблоном.
#123 #449938
>>449898
Вот сделал с плавающим курсом.
Норм?
http://ideone.com/WTEe04
sage #124 #449941
>>449938

>449938


пиздец говноа
#125 #449969
>>449926
На packagist.org есть строки, которые нужно прописывать в require для подключения зависимостей.
"yiisoft/yii": "1.1.16" - для первого yii, например.
#126 #449990
>>449894
Ну назови причастием, например Traversable.
Хотя это уже какое-то буквоебдство.
#127 #450005
>>449969
он закинется в вендор, мне его вынимать от туда или как с ним работать?
#128 #450007
ОП (куда пропал ОП-трип? "ОП ненастоящий"? ОП умер, но у треда PHP должен быть добрый ОП и знамя подняли?), у меня git внезапно начал считать конкретный .php файл бинарным. Кодировка при этом корректная, переводы строки тоже, PHPStorm видит дельты корректно, но в реп и в log показывает "this binary file...". Как заставить гит снова считать файл текстовым?
52 Кб, 238x279
#129 #450015
>>449933>>449932
Короче я тупая дрянь, не знающая пхп.

Все делается в 10 раз проще через фаил-массив.
file("list.txt"); открываем фаил. file сразу открывает, как массив.

Сохраняет все, что отправляют юзвери с поля inkey на странице.

$_file = fopen('list.txt', 'a');
fwrite($_file, "" .$_inkey.",");
fclose($_file);
#130 #450019
Вечер в хату.
Как я понимаю, namespace и use являются неотъемлемой частью ООП парадигмы в PHP.
Как относиться к людям, которые вообще их не используют в 2015 году? Сам я совсем нюфаг в PHP, потому и интересуюсь.
#131 #450021
>>450007
В конфигах гитовских глянь что написано про твой файл.
#132 #450029
>>450019
Спросить у них, как они пользуютсяавтозагрузкой классов.
#133 #450031
>>450021
А где именно?
#134 #450038
>>450031
Сделай поиск по файлам в проекте. Ищи имя этого файла.
#135 #450039
>>449880
Что бы обмениваться данными в интернетах инбифо: ты путаешь с http, сучечка, вот зачем. Это язык разметки и на нем пишется каркас сайтов и страничек. Плюс он стандартизирован и его понимают все браузеры. Я ответил на вопрос? не гугля
#136 #450043
>>449938
Ну ты сделал что у тебя курс тупо рандомится каждый раз, а это не очень. Ты сделай что бы у тебя рандомилось некое изменение этого курса. Пусть может быть какы отрицательным, так и положительным. Пусть так же будет не целым числом рублей, а скажем с долями до 0.1, ну например за год курс изменился на 0.1 рубля, или на -1.5 рубля, ок? Пусть будет например маленький шанс словить обвал рубля который сразу поднимает курс доллара в два раза!
Пусть у тебя еще выводится к твоим данным дополнительно курс доллара, а так же его изменения.

Что бы изменения были типа:
1-й год:
изменение курса: 0
курс доллара 60 рублей
2-й год:
изменение курса: 0.1
курс доллана 60.1 рублей
3-й год:
изменение курса: -1.5
курс доллара 58.6 рублей, и так далее и посмотрим куда доллар ускачет в итоге за 100 лет.
4-й год:
изменение курса: дефолт
НЕ БУ ДЕТ... говорили они, скупая доллар по 117.2 рублей
5-й год
....
последний год.
#137 #450051
>>450043
Кек, ночью займусь. Думал о том как сделать рандомным курс, но у меня не срослось допустим к какому либо значению mt_rand присвоить свой курс. Допстим прописать рандомизацию от 1го до 6ти и каждой присвоить курс. Япытался, но короче вскипел и сделал так.
#138 #450060
Есть json массив

{
5555: {
first: "5555",
second: "secondtext",
}
}

Как мне сделать foreach только ПРОПУСТИВ вервое вложение, а именно 5555 и сразу начинать с first
#139 #450061
>>450051

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


Я не понял ничего из этого, но скажу тебе вот что:
mt_rand - это функция, которая тебе всего лишь возвращает значение, в зависимости от параметров которые ты ей передал.
ну тип если ты ей передал 1 и 5, то вернет тебе случайное число от 1 до 5, что бы это число зафиксировать, тебе нужно сохранить это в переменную:
$var = mt_rand(1,5);
Ну это ты я думаю и сам понял.

Ты просто рандомь колебания курса для начала. И эти колебания накладывай на текущий курс? Это понятно как сделать для начала? Понимаешь так же как сделать так, что бы у тебя рандомились не целые числа, а скажем с 1 знаком после запятой?
#140 #450062
>>450060
foreach (json[5555] as )
#141 #450067
>>449874

>> Почему мне не удалось умножить, с помощью анонимной функции, таким образом return $o->type 2;


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

> return $o->type = $o->type 2; //Почему не получилось c return $o->type 2;


>Это неверно. Функция не должна менять объект, она должна только возвращать новое значение.


Тогда, это нужно сделать вот так:

$r = $o->type;
$r = $r x 2;

return $r

Верно? Но как это применить к определенному параметру? Передавать изначально в функцию? А дальше как? Не могу сообразить. Подскажи плиз.

>И по моему я тебе уже это говорил. Я уверен, что говорил:


>не объединяй присваивание значения и return. Это 2 разных действия и их надо писать в 2 отдельных строки


Эм... Я не припоминаю такого. Помню что ты говорил что можно передавать сразу функцией (
Это было здесь >>444020

>Тут можно сразу написать return count ... без лишних переменных.


), а вот что бы я передавал выражение когда-либо, за исключением этого случая - я не припоминаю. Плюс, так еще было написано в мануале по array_map.

>Это неверно. array_map всегда возвращает новый массив не изменяя старый. А ты возвращаешь тот же самый объект.


Действительно. Я не думал что это может быть так.
Тогда, мне нужно будет сделать эту в функцию с двумя циклами:
Первый будет создавать новый SplObjectStorage, с помощью $s->attach(clone $object);
Второй будет изменять изменять значения.
#141 #450067
>>449874

>> Почему мне не удалось умножить, с помощью анонимной функции, таким образом return $o->type 2;


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

> return $o->type = $o->type 2; //Почему не получилось c return $o->type 2;


>Это неверно. Функция не должна менять объект, она должна только возвращать новое значение.


Тогда, это нужно сделать вот так:

$r = $o->type;
$r = $r x 2;

return $r

Верно? Но как это применить к определенному параметру? Передавать изначально в функцию? А дальше как? Не могу сообразить. Подскажи плиз.

>И по моему я тебе уже это говорил. Я уверен, что говорил:


>не объединяй присваивание значения и return. Это 2 разных действия и их надо писать в 2 отдельных строки


Эм... Я не припоминаю такого. Помню что ты говорил что можно передавать сразу функцией (
Это было здесь >>444020

>Тут можно сразу написать return count ... без лишних переменных.


), а вот что бы я передавал выражение когда-либо, за исключением этого случая - я не припоминаю. Плюс, так еще было написано в мануале по array_map.

>Это неверно. array_map всегда возвращает новый массив не изменяя старый. А ты возвращаешь тот же самый объект.


Действительно. Я не думал что это может быть так.
Тогда, мне нужно будет сделать эту в функцию с двумя циклами:
Первый будет создавать новый SplObjectStorage, с помощью $s->attach(clone $object);
Второй будет изменять изменять значения.
#142 #450070
>>450005
Зачем вынимать, все зависимости у тебя будут в вендоре. Подключаешь их в index.php используя созданный композером автолоадер. Так же отдельно подключаешь Yii.

http://www.yiiframework.com/doc-2.0/guide-structure-entry-scripts.html
Тут можешь посмотреть, если не понятно, актуально для первого Yii.
#143 #450072
>>450061
Да, более менее.
да и вообще, надо же своим умом дойти, а то будет совсем не интересно.
#144 #450075
>>449934

> как же они отображаются в фотошопе?


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

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


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

Во-первых ты должен освоить все кнопки и инструменты в диалоге File -> Save for Web (Ctrl + Alt + Shift + S). Им ты можешь подобрать оптимальный формат и настройки картинки при сохранении. Разумеется прежде чем им пользоваться ты должен выучить особенности и преимущества разных форматов графики: JPG, GIF, PNG8, PNG24, SVG.

http://rugraphics.ru/photoshop/sohranyaem-izobrazhenie-dlya-web
http://www.adobeps.ru/photoshop-lessons/56-modul-save-for-web.html (статья по моему немного старая, в том что касается разрешения экрана)

Далее, есть слайсы — ты можешь разметить страницу на кусочки и сохранить их сразу:

http://iloveicons.ru/blog/2010/11/19/slice-tool-i-eshhyo-nemnogo-o-photoshop/
http://www.foxter.ru/showthread.php?t=2367
http://habrahabr.ru/post/45948/

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

Вырезаешь так: выделаешь прямоугольник и далее жмешь либо Ctrl + C (скопировать из текущего слоя) либо Ctrl + Shift + C (скопировать из всех слоев вместе), затем Ctrl + N (новый документ, размеры уже будут подставлены), затем Ctrl + V (вставить), затем Ctrl + SHift + Alt + S. Я обычно сохраняю и PSD с вырезанным куском, и картинку для веба. В этом случае, если я обнаружу например неровные края или артефакты сжатия, я могу вернуться к исходнику.

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

Если набить руку, то нарезка простого макета не займет много времени.

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

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

А, еще по слоям можно перемещаться по моему Ctrl + PgDn/Up (или Alt+ PgDn?).

Еще, залить выделенную область фоном или передним цветом можно с помощью Ctrl + Alt + Backspace/Ctrl + Shift + Backspace. залить другим цветом или текстурой можно с помощью Alt + F5 (или Alt + Ctrl + F5?).

Инструменты переключаются буквами, B — кисть, M — выделение, V — перемещение, U — прямоугольники.

В общем, советую изучить инструменты и горячие клавиши — поможет сэкономить время.
#144 #450075
>>449934

> как же они отображаются в фотошопе?


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

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


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

Во-первых ты должен освоить все кнопки и инструменты в диалоге File -> Save for Web (Ctrl + Alt + Shift + S). Им ты можешь подобрать оптимальный формат и настройки картинки при сохранении. Разумеется прежде чем им пользоваться ты должен выучить особенности и преимущества разных форматов графики: JPG, GIF, PNG8, PNG24, SVG.

http://rugraphics.ru/photoshop/sohranyaem-izobrazhenie-dlya-web
http://www.adobeps.ru/photoshop-lessons/56-modul-save-for-web.html (статья по моему немного старая, в том что касается разрешения экрана)

Далее, есть слайсы — ты можешь разметить страницу на кусочки и сохранить их сразу:

http://iloveicons.ru/blog/2010/11/19/slice-tool-i-eshhyo-nemnogo-o-photoshop/
http://www.foxter.ru/showthread.php?t=2367
http://habrahabr.ru/post/45948/

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

Вырезаешь так: выделаешь прямоугольник и далее жмешь либо Ctrl + C (скопировать из текущего слоя) либо Ctrl + Shift + C (скопировать из всех слоев вместе), затем Ctrl + N (новый документ, размеры уже будут подставлены), затем Ctrl + V (вставить), затем Ctrl + SHift + Alt + S. Я обычно сохраняю и PSD с вырезанным куском, и картинку для веба. В этом случае, если я обнаружу например неровные края или артефакты сжатия, я могу вернуться к исходнику.

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

Если набить руку, то нарезка простого макета не займет много времени.

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

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

А, еще по слоям можно перемещаться по моему Ctrl + PgDn/Up (или Alt+ PgDn?).

Еще, залить выделенную область фоном или передним цветом можно с помощью Ctrl + Alt + Backspace/Ctrl + Shift + Backspace. залить другим цветом или текстурой можно с помощью Alt + F5 (или Alt + Ctrl + F5?).

Инструменты переключаются буквами, B — кисть, M — выделение, V — перемещение, U — прямоугольники.

В общем, советую изучить инструменты и горячие клавиши — поможет сэкономить время.
#145 #450077
>>450075
ОП, пока ты тут, скажи мне, что фокусить для будущей работы в бэкэнде? Фреймворки, MySQL, пыха\руби\питон, это всё, или еще чего нужно?
#146 #450078
>>450061
Я ж ньюфаг, но идея была в принципе вот такая, когда пытался с курсом играться.

$cource = mt_rand(1,6);

If(mt_rand == 1) {
$cource = 58;
}
elseif(/////){
}
И так по всем пунктам, но выходит что он курсу приваивал знаение от 1го до 6.
#147 #450082
>>450075
И все же, где мне взять эти шрифты? Разве не должны они идти вместе с макетом? Я даже название их посмотреть не могу.
#148 #450086
>>450062
Не работает.

Вот массив - http://goo.gl/6TdnfJ

И мне нужно rofeach массив исклив первое значение {
1644: его нужно игнорировать, а сам массив должен читаться с
{
key: "",
premium: "true",
#149 #450103
>>449934

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

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

А, вот еще совет как делать бесшовные текстуры (например для фона): http://www.photoshop-master.ru/lessons.php?rub=28&id=760

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

http://chikuyonok.ru/2009/05/sprites-1/
http://www.artlebedev.ru/tools/technogrette/img/png-1/
http://www.artlebedev.ru/tools/technogrette/img/jpeg-1/
http://chikuyonok.ru/2011/08/optimize-with-canvas/
https://web.archive.org/web/20140701143104/http://chikuyonok.ru/2009/03/photoshop-for-webdevs-3/
https://web.archive.org/web/20140701163530/http://chikuyonok.ru/2009/04/photoshop-for-webdevs-4/
https://web.archive.org/web/20140702182126/http://chikuyonok.ru/2009/04/photoshop-for-webdevs-5/
https://web.archive.org/web/20140701133745/http://chikuyonok.ru/2009/03/photoshop-for-webdevs-2/ (сейчас это наверно на CSS3 проще сделать, но сама идея актуальна)

Я могу рассказать еще про один трюк, который я сам применял. Допустим у нас есть большая фотография с небольшой надписью (или любым другим контрастным мелкодетальным изображением) на ней. С одной стороны, картинка хорошо жмется JPG, но при этом текст мылится. А PNG идеально передает все, но картинка весит много. В этом случае уместно может быть разрезать картинку на 2 части: фон который мы жмем JPG и надпись сжатая в PNG.

Ты конечно тут мог бы сказать что ты вообще-то php изучаешь, но я бы советовал не ограничивать свой кругозор. Мне например умение пользоваться фотошопом пригодилось. Тем более я же не говорю что от тебя требуется тратить по 2 часа на каждую картинку, просто почитай чтобы знать что вообще можно сделать.
#149 #450103
>>449934

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

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

А, вот еще совет как делать бесшовные текстуры (например для фона): http://www.photoshop-master.ru/lessons.php?rub=28&id=760

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

http://chikuyonok.ru/2009/05/sprites-1/
http://www.artlebedev.ru/tools/technogrette/img/png-1/
http://www.artlebedev.ru/tools/technogrette/img/jpeg-1/
http://chikuyonok.ru/2011/08/optimize-with-canvas/
https://web.archive.org/web/20140701143104/http://chikuyonok.ru/2009/03/photoshop-for-webdevs-3/
https://web.archive.org/web/20140701163530/http://chikuyonok.ru/2009/04/photoshop-for-webdevs-4/
https://web.archive.org/web/20140702182126/http://chikuyonok.ru/2009/04/photoshop-for-webdevs-5/
https://web.archive.org/web/20140701133745/http://chikuyonok.ru/2009/03/photoshop-for-webdevs-2/ (сейчас это наверно на CSS3 проще сделать, но сама идея актуальна)

Я могу рассказать еще про один трюк, который я сам применял. Допустим у нас есть большая фотография с небольшой надписью (или любым другим контрастным мелкодетальным изображением) на ней. С одной стороны, картинка хорошо жмется JPG, но при этом текст мылится. А PNG идеально передает все, но картинка весит много. В этом случае уместно может быть разрезать картинку на 2 части: фон который мы жмем JPG и надпись сжатая в PNG.

Ты конечно тут мог бы сказать что ты вообще-то php изучаешь, но я бы советовал не ограничивать свой кругозор. Мне например умение пользоваться фотошопом пригодилось. Тем более я же не говорю что от тебя требуется тратить по 2 часа на каждую картинку, просто почитай чтобы знать что вообще можно сделать.
#150 #450105
>>449894

Если интерфейс обозначает умение то оканчивается на -able:

Serializable, Traversable, Likeable.

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

RequestInterface, ResponseInterface, MessageInterface

В некоторых языках (C++, C#) используют I + имя класса например IDispatcher, IRequest, в PHP так не принято.
#151 #450112
>>450077

А что ты знаешь? Вообще глубокое изучение Symfony 2 очень полезно для бекендщика (разумеется перед этим ты должен изучить ООП, MVC и DI). Также, база данных: индексы, оптимизация.

>>450082

Посмотреть название ты можешь. Выбирай Text Tool (T) щелкай на надпись и появится шрифт и размер.

Шрифты по моему скачиваются в интернете. но на компьютер тебе ставить их не обязательно. Тебе главное их подключить к странице либо через Google Fonts либо через этот конструктор http://www.fontsquirrel.com/tools/webfont-generator

Статья http://habrahabr.ru/post/138747/
http://htmlbook.ru/blog/vstraivaem-shrifty-pri-pomoshchi-font-squirrel-font-fac

font-face:

http://vremenno.net/html-css/cross-browser-font-face/
http://habrahabr.ru/post/113136/

(здесь ты можешь заметить что даже подключение шрифта все браузеры умудрились сделать по-своему и с подводными камнями. Аналогичные проблемы есть с форматами видео и аудио поддерживаемыми браузерами. Привыкай.)
#152 #450113
>>450082

Если нужные тебе шрифты платные, ты можешь заменить их на похожие бесплатные. Найти их можно например на Google Fonts.

> Разве не должны они идти вместе с макетом?


Наше задание ближе к реальному миру, а не идеальному.
#153 #450124
>>449880

> зачем нужен HTML,


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

>>449888

Все верно.

>>449894

УмеющийХодить (Walkable), УмеющийПрыгать (Jumpable?). Также если интерфейс представляет не умение, а объект, управляющий машиной то ИнтерфейсВодителя (DriverInterface) например (а реализациями этого интерфейса могут быть например ЧеловекВодитель, КотВодитель и РобоВодитель).

>>449903

Тогда удобно JOIN использовать.

>>449906

Бывает еще RequestInterface или MessageInterface когда интерфейс абстрагирует не одну способность, а целый класс.

>>449915

> -webkit-transition:color 1.5s;


Что-то в моем фаерфоксе не работает. Сделай для всех поддерживающих браузеров:

http://caniuse.com/#search=transition
http://css3.bradshawenterprises.com/which-vendor-prefixes-are-needed/

Я также добавлю что вендорные префиксы начали использовать несколько лет назад по той причине что браузеры внедряли поддержку новых фич до оформления стандарта, и префиксы предназначались для любителей поэкспериментировать (а не для верстки). Но вместо этого верстальщики начали массово их использовать в верстке, причем часто они ставили префикс для одного браузера и не ставили для другого (прямо как ты). Эта практика была признана дурной и теперь экспериментальные фичи надо включать в настройках браузера, по умолчанию они не доступны. Но вендорные префиксы стоит по-прежнему ставить для более старых браузеров.
#153 #450124
>>449880

> зачем нужен HTML,


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

>>449888

Все верно.

>>449894

УмеющийХодить (Walkable), УмеющийПрыгать (Jumpable?). Также если интерфейс представляет не умение, а объект, управляющий машиной то ИнтерфейсВодителя (DriverInterface) например (а реализациями этого интерфейса могут быть например ЧеловекВодитель, КотВодитель и РобоВодитель).

>>449903

Тогда удобно JOIN использовать.

>>449906

Бывает еще RequestInterface или MessageInterface когда интерфейс абстрагирует не одну способность, а целый класс.

>>449915

> -webkit-transition:color 1.5s;


Что-то в моем фаерфоксе не работает. Сделай для всех поддерживающих браузеров:

http://caniuse.com/#search=transition
http://css3.bradshawenterprises.com/which-vendor-prefixes-are-needed/

Я также добавлю что вендорные префиксы начали использовать несколько лет назад по той причине что браузеры внедряли поддержку новых фич до оформления стандарта, и префиксы предназначались для любителей поэкспериментировать (а не для верстки). Но вместо этого верстальщики начали массово их использовать в верстке, причем часто они ставили префикс для одного браузера и не ставили для другого (прямо как ты). Эта практика была признана дурной и теперь экспериментальные фичи надо включать в настройках браузера, по умолчанию они не доступны. Но вендорные префиксы стоит по-прежнему ставить для более старых браузеров.
#154 #450132
>>449915

> input.tab


> label.tab{


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

.tabs-input {
.table-header {

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

.tabs > input

и сэкономить время на расстановку классов.

>>449926

Тебе надо изучить сам композер сначала:

http://habrahabr.ru/post/145946/

Установка сводится к 2 вещам:

1) создаем composer.json где пишем названия и версии библиотек (можно посмотреть на packagist)
2) выполняем php composer.phar install

>>449932

Честно говоря лапша какая-то в худших традициях php. Все смешано в кучу, никакой обработки ошибок.
#154 #450132
>>449915

> input.tab


> label.tab{


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

.tabs-input {
.table-header {

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

.tabs > input

и сэкономить время на расстановку классов.

>>449926

Тебе надо изучить сам композер сначала:

http://habrahabr.ru/post/145946/

Установка сводится к 2 вещам:

1) создаем composer.json где пишем названия и версии библиотек (можно посмотреть на packagist)
2) выполняем php composer.phar install

>>449932

Честно говоря лапша какая-то в худших традициях php. Все смешано в кучу, никакой обработки ошибок.
#155 #450137
>>449969

Лучше писать 1.~ чтобы не привязываться к конкретной версии.

>>449990

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

>>450005

Его не надо вынимать оттуда. Но надо подключить.

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

http://www.simplecoding.org/composer-yii-imagine-nebolshoe-prilozhenie-dlya-zagruzki-kartinok.html

Также подумай не проще ли перейти на Yii2 который новее и лучше соответствует современным подходам в разработке.
#156 #450145
>>450103

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


Охуительные истории
мимо-верстун
#157 #450147
>>450007

Сейчас сайт сделан так что трипкод постоянно теряется. Я замучался его вводить.

> у меня git внезапно начал считать конкретный .php файл бинарным.



Какая кодировка? Не utf-16 случайно?

Также пишут git может реагировать на слишком длинные строки.

Принудительно сделать файл текстовым можно через http://git-scm.com/docs/gitattributes но я бы советовал вместо этого разобраться и исправить проблему с файлом.

>>450015

fopen/fwrite заменяется на file_put_content. ты наверно по какому-то древнему учебнику учился.

Ну и плохая идея начинать переменные с подчеркивания. Некрасиво же и непонятно чем _file лучше чем file? Тем что дольше печатать или тем что хуже читается?

>>450019

да. Библиотеки и фреймворки их используют .

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


использовать ты их не обязан, а знать обязан.

>>450031

.gitattributes если он есть.

>>450039

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

>>450051

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

Кстати, я не купил ни одного доллара когда курс упал первый раз на 10% (и позже тоже). Я молодец? В 2008 году кстати тоже не покупал.

>>450067

> Тогда, это нужно сделать вот так:



> $r = $o->type;


> $r = $r x 2;


> return $r


> Верно?



да

> Но как это применить к определенному параметру? Передавать изначально в функцию?


Прописать в функции все что надо.

> Не могу сообразить. Подскажи плиз.


$result = array_map(function ($x) { return pow($x, 2); }, range(1, 10));
var_dump($result); // 1 , 4, 9, 16 ...

> Эм... Я не припоминаю такого. Помню что ты говорил что можно передавать сразу функцией


Значит не тебе говорил

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


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

Неправильно: return $x = $a + $b;
Более правильно: $x = $a + $b; return $x;
Совсем правильно: return $a + $b;

Посмотри на эти 3 примера. Какой смысл писать 1-й или 2-й вариант когда есть третий?

> Тогда, мне нужно будет сделать эту в функцию с двумя циклами:


> Первый будет создавать новый SplObjectStorage, с помощью $s->attach(clone $object);


> Второй будет изменять изменять значения.


Не вижу смысла делать 2 цикла. Сделай один.

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

Потому применять array_map к массиву объектов чтобы получить на выходе новый массив объектов довольно глупо. Какой смысл создавать новый массив с теми же самыми объектами? Ты можешь пройтись по исходному массиву и поменять объекты в нем:

foreach ($objects as $obejct) {
$object->x= 2;
}

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

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

$result = array_map(function ($obejct) {
return $obect->getSomething( );
}, $objects);

Также, можно наоборот взять массив чисел и превратить в массив объектов:

$numbers = range(1, 10);
$objects = array_map(function ($number) {
return new SomeClass($number);
}, $numbers);

Синтаксис в PHP довольно громоздкий. В других языках преобразование массива через map выглядит гораздо компактнее:

Вот пример как в Руби с помощью функции map взять из массива объектов people все фамилии (из поля surname):

people.map { |p| p.surname }

Это эквивалентно такому php коду

array_map(function ($p) {
return $p->surname;
}, $people);

Потому в PHP функции вроде array_map используются реже.
#157 #450147
>>450007

Сейчас сайт сделан так что трипкод постоянно теряется. Я замучался его вводить.

> у меня git внезапно начал считать конкретный .php файл бинарным.



Какая кодировка? Не utf-16 случайно?

Также пишут git может реагировать на слишком длинные строки.

Принудительно сделать файл текстовым можно через http://git-scm.com/docs/gitattributes но я бы советовал вместо этого разобраться и исправить проблему с файлом.

>>450015

fopen/fwrite заменяется на file_put_content. ты наверно по какому-то древнему учебнику учился.

Ну и плохая идея начинать переменные с подчеркивания. Некрасиво же и непонятно чем _file лучше чем file? Тем что дольше печатать или тем что хуже читается?

>>450019

да. Библиотеки и фреймворки их используют .

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


использовать ты их не обязан, а знать обязан.

>>450031

.gitattributes если он есть.

>>450039

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

>>450051

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

Кстати, я не купил ни одного доллара когда курс упал первый раз на 10% (и позже тоже). Я молодец? В 2008 году кстати тоже не покупал.

>>450067

> Тогда, это нужно сделать вот так:



> $r = $o->type;


> $r = $r x 2;


> return $r


> Верно?



да

> Но как это применить к определенному параметру? Передавать изначально в функцию?


Прописать в функции все что надо.

> Не могу сообразить. Подскажи плиз.


$result = array_map(function ($x) { return pow($x, 2); }, range(1, 10));
var_dump($result); // 1 , 4, 9, 16 ...

> Эм... Я не припоминаю такого. Помню что ты говорил что можно передавать сразу функцией


Значит не тебе говорил

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


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

Неправильно: return $x = $a + $b;
Более правильно: $x = $a + $b; return $x;
Совсем правильно: return $a + $b;

Посмотри на эти 3 примера. Какой смысл писать 1-й или 2-й вариант когда есть третий?

> Тогда, мне нужно будет сделать эту в функцию с двумя циклами:


> Первый будет создавать новый SplObjectStorage, с помощью $s->attach(clone $object);


> Второй будет изменять изменять значения.


Не вижу смысла делать 2 цикла. Сделай один.

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

Потому применять array_map к массиву объектов чтобы получить на выходе новый массив объектов довольно глупо. Какой смысл создавать новый массив с теми же самыми объектами? Ты можешь пройтись по исходному массиву и поменять объекты в нем:

foreach ($objects as $obejct) {
$object->x= 2;
}

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

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

$result = array_map(function ($obejct) {
return $obect->getSomething( );
}, $objects);

Также, можно наоборот взять массив чисел и превратить в массив объектов:

$numbers = range(1, 10);
$objects = array_map(function ($number) {
return new SomeClass($number);
}, $numbers);

Синтаксис в PHP довольно громоздкий. В других языках преобразование массива через map выглядит гораздо компактнее:

Вот пример как в Руби с помощью функции map взять из массива объектов people все фамилии (из поля surname):

people.map { |p| p.surname }

Это эквивалентно такому php коду

array_map(function ($p) {
return $p->surname;
}, $people);

Потому в PHP функции вроде array_map используются реже.
#158 #450148
>>450067

> Первый будет создавать новый SplObjectStorage, с помощью $s->attach(clone $object);


Погоди, зачем клонировать объекты? В ООП в 99% случаев мы хотим получить тот же самый объект.

Я думаю, map должен работать по другому. Он должен возвращать массив значений, которые вернет функция. То есть map обходит SplObjectStorage, для каждого объекта вызывает функцию и возвращает массив значений. Например ее можно использовать так, чтобы собрать результаты вызова метода:

$results = $storage->map(function ($obj) {
return $obj->getTotalSalary( );
});

Я не вижу какой смысл создавать второй Storage с теми же самыми объектами или их клонами. зачем это надо?

А вот filter — это другое. Она должна создавать и возвращать новый Storage с отобранными объектами.
#159 #450152
>>450067

А если у тебя есть Storage с объектами и ты хочешь их изменить, то тебе нужен не map, а foreach:

$storage->each(function ($o) {
$o->x = 2;
});

>>450078

Лучше не ставить новый курс, а менять существующий:

If(mt_rand == 1) {
$cource += 1; // вырос на 1 руб

Так реалистичнее.

>>450086

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

>>450145

А что плохого то? По твоему постоянно переключаться и переделывать все быстрее будет? Плюс, можно сразу подписать где мы хотим флоаты сделать например, где инлайн блоки, прикинуть как макет будет тянуться, какой блок какой расталкивает и в каких местах.
#160 #450154
>>450152

>А что плохого то?


Лишние действия.

>По твоему постоянно переключаться и переделывать все быстрее будет?


Что переделывать-то? Нужны данные из макета, полез и посмотрел.

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


Я это делаю в голове. Брат жив, зависимость есть.
#161 #450161
>>450154

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


Ну так мерять расстояние и размеры удобнее сразу, а не по одному, по моему. Особенно когда элементы бок к боку стоят. Чем постоянно переключаться.
#162 #450169
>>450078
ты код покажи который у тебя это дело собирает сначала.
3702 Кб, 337x263
#163 #450172
>>450152

> Я вижу что ты явно пропустил уроки


Я уже все написал.
Там было все проще. Просто я тупил и не умел работать с json массивом.
На пхп начал писать вчера обедом, уроки я вообще не посещал.
#164 #450177
>>450161
Сразу конечно удобнее, но только если ты способен все это держать в голове. Записывать на бумажечку как минимум странно, как максимум долго, если твой макет хоть чуть выше базового.
#165 #450181
>>450086
Покажи кусок кода или код который у тебя этот json собирает сначала. И где ты запускаешь свой foreach () {}

>>450078
Ну смотри, у тебя неправильная строчка тут:
If(mt_rand == 1) {

ты же сохранил уже результат функции mt_rand() в переменную $course перед этим. Используй её в проверке. А лучше заведи другую переменную под это, а то у тебя в переменной $cource совсем не курс лежит, после строчки $cource = mt_rand(1,6);
31 Кб, 1366x704
#166 #450191
>>450060
Вот сделал, все изи. Куда слать резюме что бы тебя заменить?
320 Кб, 1329x660
#167 #450308
Как правильно включить в винде mbstring ?
86 Кб, 253x235
#168 #450313
>>450191
Кого заменить? Я пишу просто фо фан. Это никакого отношения к гудгеймпу не имеет. Языка я не знаю, но вот решил просто попробовать сделать аналог http://prestige-gaming.ru/streams/ например.

Суть в том, что когда ты вводишь ник - к тебе приходит json массив от апи гг. И этот массив начинается с id:{}. То есть получается начало массива и его ид не известен т.к я встраиваю других юзверей и их ид без отдельного json запроса мине не известны, только ник.

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

Теперь я хочу сделать сортировку стримов ГГ по количеству зрителей. У АПИ твича это говно как-то само работает, а вот на ГГ нет.

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

Если хочешь, то я могу нанять тебя за 30 рублей/неделя.
#169 #450322
Аноны, есть какие-нибудь задания по XML? Я что то найти него не могу, я та понял он много где применяется, вчера начал читать про xml, при помощи DOM написал некоторое подобие рсс ленты, что на нём ещё можно делать? Или большая часть задач по XML это получение данных из базы данных и поставление их между нужными тегами?
211 Кб, 1365x639
#170 #450324
>>450313
Чет я перечитал тебя дважды, и все равно ничего не понял. Массив там такого вида:
массив с 1 элементом, название которого это айдишник игрока, а значение - это другой массив с его данными или хуй пойми чем.
#171 #450432
>>450112

> но на компьютер тебе ставить их не обязательно. Тебе главное их подключить к странице либо через Google Fonts либо через этот конструктор


Как же я их подключу через конструктор, если кнопка upload fonts загружает шрифт с жесткого диска. Другой я там не нашел. Ну а в гугл фонтс нужный мне шрифт недоступен.
#172 #450436
>>450308

Может быть у тебя несколько php.ini и ты правишь не тот. Увидеть используемый файл можно выполнив команду

php -i

И найдя строку Loaded config file.

Увидеть список подключенных модулей можнл набрав

php -m

Если ты используешь сборки вроде WAMP то тебе надо запускать консоль WAMP чтобы она выставила нужные переменные окружения.
sage #173 #450437
Где можно посмотреть архивы тредов? Они же сохранены, правда?..
#174 #450438
>>450437
Пардон, сажа приклеилась.
#175 #450446
>>450308

php.ini-development это не конфиг а пример конфига. Правильный файл называется php.ini

>>450313

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


Это тред изучения php. Для тех, кто хочет учиться писать правильно. Что ты тут тогда забыл?

Непонятно зачем ты тут настойчиво выкладываешь примеры того как делать не надо. Что ты хочешь сказать этим? Это такой изысканный вариант запостить сажу?
#176 #450448
>>450432

Найди похожий внешне шрифт на том же Google Fonts.

>>450322

Задача 1 на XML

Дана HTML-страница: http://spb.hh.ru/applicant/searchvacancyresult.xml?areaId=231&notWithoutSalary=&orderBy=0&text=xml&professionalAreaId=0&desireableCompensation=&compensationCurrencyCode=RUR

Надо загрузить ее HTML-код в DOM ( http://php.net/manual/en/domdocument.loadhtml.php ), распарсить ее, например, с помощью Xpath, и получить массив объектов JobOffer с полями: title (название вакансии), minSalary, maxSalary (0, если не указана), company (название компании), address, publishDate (дата публикации в вие объекта DateTime).

То есть HTML волшебным образом превращается в массив объектов, с которыми можно нормально работать, например, вывести список с помощью echo

Не нравится парсить вакансии? Парсь торренты:
www.nyaa.eu/?page=search&cats=0_0&filter=0&term=watamote О, уже 4 серия вышла, надо создать массив объектов TorrentFile с полями category (одна из констант), title, torrentUrl (ссылка скачивания торрент-файла), size (числом), seeders, leechers, downloadCount

Задача 2 на XML
Условия в ней примерно такие: пользователь вводит адрес в одной из столиц (Москва или Спб — выбери сам), скрипт определяет район города и ближайшее метро.

Делается это с помощью геокодера Яндекса: http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml

Пример запроса: http://geocode-maps.yandex.ru/1.x/?geocode=Москва,+Тверская+улица,+дом+7

Первым запросом ты определяешь координаты по адресу (и существует ли адрес). Вторым обратным запросом, определяешь район и метро по координатам. Для запросов используется формат XML, так что использовать DOM придется. Для отправки запросов достаточно file_get_contents или curl. На бесплатном хостинге запросы отправлять нельзя, так что скрипт должен работать их командной строки на локалхосте.

Есть еще такая, на работу с большими файлами:

> 3) работа с ФИАС (сначала придется скачать 1.5 Гб архив с базой), надо скриптом разобрать базу и составить список районов и городов нашей страны. Огромную базу таких размеров в память не засунешь, надо исхитряться, например, с помощью XMLReader. Ну или если тебе не нравится ФИАС, можно сделать что-то аналогичное с OpenStreetMAp, например, распарсить оттуда координаты остановок автобусов.

#176 #450448
>>450432

Найди похожий внешне шрифт на том же Google Fonts.

>>450322

Задача 1 на XML

Дана HTML-страница: http://spb.hh.ru/applicant/searchvacancyresult.xml?areaId=231&notWithoutSalary=&orderBy=0&text=xml&professionalAreaId=0&desireableCompensation=&compensationCurrencyCode=RUR

Надо загрузить ее HTML-код в DOM ( http://php.net/manual/en/domdocument.loadhtml.php ), распарсить ее, например, с помощью Xpath, и получить массив объектов JobOffer с полями: title (название вакансии), minSalary, maxSalary (0, если не указана), company (название компании), address, publishDate (дата публикации в вие объекта DateTime).

То есть HTML волшебным образом превращается в массив объектов, с которыми можно нормально работать, например, вывести список с помощью echo

Не нравится парсить вакансии? Парсь торренты:
www.nyaa.eu/?page=search&cats=0_0&filter=0&term=watamote О, уже 4 серия вышла, надо создать массив объектов TorrentFile с полями category (одна из констант), title, torrentUrl (ссылка скачивания торрент-файла), size (числом), seeders, leechers, downloadCount

Задача 2 на XML
Условия в ней примерно такие: пользователь вводит адрес в одной из столиц (Москва или Спб — выбери сам), скрипт определяет район города и ближайшее метро.

Делается это с помощью геокодера Яндекса: http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml

Пример запроса: http://geocode-maps.yandex.ru/1.x/?geocode=Москва,+Тверская+улица,+дом+7

Первым запросом ты определяешь координаты по адресу (и существует ли адрес). Вторым обратным запросом, определяешь район и метро по координатам. Для запросов используется формат XML, так что использовать DOM придется. Для отправки запросов достаточно file_get_contents или curl. На бесплатном хостинге запросы отправлять нельзя, так что скрипт должен работать их командной строки на локалхосте.

Есть еще такая, на работу с большими файлами:

> 3) работа с ФИАС (сначала придется скачать 1.5 Гб архив с базой), надо скриптом разобрать базу и составить список районов и городов нашей страны. Огромную базу таких размеров в память не засунешь, надо исхитряться, например, с помощью XMLReader. Ну или если тебе не нравится ФИАС, можно сделать что-то аналогичное с OpenStreetMAp, например, распарсить оттуда координаты остановок автобусов.

#177 #450449
>>450437

частично выложен тут:

http://www.mediafire.com/download/gza5360wdzqd743/threads-archive-pr-1..17.zip (первые треды из pr)

http://www.mediafire.com/?3zxb19z9j2q5gf2 (древние 11-19 треды, 74 Мб)

и на дропбоксе: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (периодически дежит)

Но вообще, в архиве тредов ничего особо ценного нет, больше флуда всякого.
141 Кб, 1366x768
#178 #450459
Приветствую всех. Как думаете, почему не получается завезти правильную кодировку в пхп файл? Локальный сервер на денвере (или как правильно сказать).
<html>
<head>
<meta charset="utf-8">
<title>Тестируем пхп</title>
</head>
<body>
<?php echo '<p>Привет, мир!</p>'; ?>
</body>
</html>
#179 #450464
>>450459
Сам фаил в какой кодировке?

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
#180 #450468
>>450464

XHTML давно умер (потому что никто его не использовал, все писали псевдо XHTML который браузер парсил как HTML. Зачем так делали, до сих пор не понимаю).
#181 #450469
>>450459
Это старая бага/фича Денвера, в настройках апача надо принудительно выставить чарсет. А вообще скачай денверфаст, там все это есть http://rutracker.org/forum/viewtopic.php?t=4283915
#182 #450475
http://ideone.com/zjmA2U
Окей, я типа сделал сириусли что-то полезное скопировав и скомпилировав код опа в один файл? Я качаюсь в пхп и ООП, сириусли?
#183 #450478
>>450475

Там дальше будет задача про ООО Вектор. А эта задача проверяет самые базовые вещи: способен ли ты понимать то что написано и способен ли составить куски в нужном порядке. Ну и должна повышать уверенность в своих силах перед более сложной задачей.
#184 #450481
>>450475

Кстати там ошибка, смотри внизу страницы

> PHP Notice: Undefined variable: naswers in /home/hj7Onb/prog.php on line 72

#185 #450482
Ребят, давно не заходил, прошёл только первый блок уроков, дальше не осилил гугленье. Второй блок уже есть?
#186 #450485
>>450482

ОП пост читал? Там есть задания с комментариями.
#187 #450486
>>450478
>>450481
Ну да, просто после ада по типу регулярок или доп задач это кажется супер легким. Или это можно было начинать после изучения функций? Спин-офф в ооп делать сразу и параллельно иди в более сложные задачи по учебнику.
#188 #450488
>>450486

Вектор делай. Там еще будет дополнительный пункт про антикризисные меры, если тебе мало покажется.
#189 #450491
>>450469
>>450464
спасибо, ребят, всё заработало. Кстати, почему не работает \n и вместо него ставится пробел? Пока заменяю тегом </br>, но это же не есть правильно?
#190 #450495
>>450491

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

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

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

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

>>450486

Вообще хорошо что задача кажется тебе легкой. Многие боятся ООП и говорят что он нереально сложный и спрашивают реально ли стать программистом без ООП и фреймворков.
161 Кб, 1366x768
#191 #450499
>>450495
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\word\www\index.php:7) in Z:\home\word\www\index.php on line 8
Вот что пишет.
#192 #450507
>>450495
В учебнике опа все доступно объяснено, помню пытался понять по какой-то книге по С++, что такое конструктор, но так и не осилил. А у опа все просто и понятно: конструктор - метод, который автоматически вызывается при создании объекта класса.
#193 #450512
>>450499
хедеры должен отсылаться ДО любых операторов вывода и любого html-я, если нужно после добавь ob_start() в начало документа
#194 #450629
http://ideone.com/TGSwcZ

первая задача на вектор, жду критики.
33 Кб, 600x434
#195 #450631
#196 #450653
Начал учить PHP после JS. Какого здесь массивы одновременно и массивы, и объекты? Это же неудобно.
#197 #450656
>>450653
Не понимат тебя, поясни конкретнее. Массивы вроде как это массивы, а объекты это объекты.

http://ideone.com/4E9bKV

Ты про ассоциативные массивы? Которые похожи по структуре на объекты?
#198 #450657
>>450147

>Прописать в функции все что надо


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

>Какой смысл создавать новый массив с теми же самыми объектами? Ты можешь пройтись по исходному массиву и поменять объекты в нем:



>>449874

>Это неверно. array_map всегда возвращает новый массив не изменяя старый. А ты возвращаешь тот же самый объект.


Я запутался =_=

>>450148

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



Не понял, а зачем нам получать массив? Я думал, object_filter будет нужен для того что бы поменять определенные параметры в объекте или получить новые объекты с изменением определенных параметров.
#199 #450658
>>450656
Ну в JS массив - это просто набор значений с порядковыми номерами, а объект - набор ключ-значение. А в PHP можно создавать массивы, у которых вместо номеров стоит текстовый ключ.
#200 #450664
>>450658
И что, это плохо? Больше возможностей же
#201 #450674
>>450448
Теперь то я понял в чём отличие более менее реальных задач от учебных. У меня был вот такой XML который я собственно сам и создал:

<stat>
<author>Aramis</author>
<name>Portos</name>
<pubyear>1995</pubyear>
<price>2000</price>
</stat>

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

$doc = new DOMDocument();
$doc->load("books.xml");
$root = $doc->documentElement;
$child = $root->childNodes;
echo $root->textContent;

Но если я делаю что то подобное с этой ссылкой (само собоq используя loadHTML), то нечего не получается, выскакивают ошибки, а если вывести

print_r($child);

то получается

DOMNodeList Object ( [length] => 1 )

В textContent которого будет лежать всего лишь строка со ссылкой. Я немного не могу въехать как делать,
#201 #450674
>>450448
Теперь то я понял в чём отличие более менее реальных задач от учебных. У меня был вот такой XML который я собственно сам и создал:

<stat>
<author>Aramis</author>
<name>Portos</name>
<pubyear>1995</pubyear>
<price>2000</price>
</stat>

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

$doc = new DOMDocument();
$doc->load("books.xml");
$root = $doc->documentElement;
$child = $root->childNodes;
echo $root->textContent;

Но если я делаю что то подобное с этой ссылкой (само собоq используя loadHTML), то нечего не получается, выскакивают ошибки, а если вывести

print_r($child);

то получается

DOMNodeList Object ( [length] => 1 )

В textContent которого будет лежать всего лишь строка со ссылкой. Я немного не могу въехать как делать,
#202 #450686
Расскажите лучше о своих историях успеха как вы начали этим заниматься и через пару месяцев устроились на хорошую работу.
#203 #450687
>>450686

>450686\t


Выучил первые уроки из учебника, 2 месяца как раз заняло, написал резюме, сами позвонили и взяли, но я съебал. Сижу терь дома сычую.
someApprentice #204 #450696
>>450686
За пару месяцев ОП научил меня делать простую регистрацию. Потом спонтанно решил поскроллить вакансии по php у себя в провинции. Нашел, позвонил, пригласили, написал короткое резюме в пол страницы, ответил на пару вопросов на собеседовании, приняли.
Закончилось все тем, что у моего работодателя были какие-то проблемы с налогами и ему заблокировали счет. Он мне до сих пор должен лол.
#205 #450698
>>450696
И всё? Сколько проработал там?
someApprentice #206 #450699
>>450698
Месяца три где-то
#207 #450701
>>450699
Научился чему-нибудь? РАзве после 3х месяцев опыта не стало легче найти снова работку?
someApprentice #208 #450703
>>450701
Просто там был Битрикс. Мне он очень сильно не понравился, и я решил что лучше будет изучить какой-нибудь фреймворк типо Slim или Yii, чем возвращаться на что-то подобное. Да и просто желания нету работать, если честно ◕ ‿ ◕
#209 #450707
>>450703
Ну ясно, кароче только скиллы поди подрастерял, пока ДИЗАЙН НАТЯГИВАЛ?
someApprentice #210 #450710
>>450707
Не думаю что я что-то потерял на это работе, в любом случае я получил хоть какой-то опыт.
someApprentice #211 #450711
В смысле опыт работы в общем. Он тоже не мало важен.
#212 #450712
>>450711

>немаловажен


fix
#213 #450713
>>450712

>fix


thx
#214 #450718
>>450710
>>450711

Ну так, ты не пробовался даже делать что-то? Алсо на биртиксе какой паттерн используется? И она само собой ведь на ООП написана?
#215 #450797
>>450674

Вывести XML можно так

$xml = $doc->saveXml($node); // смотри мануал по saveXML

var_dump($xml);

>>450687

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

>>450718

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

http://faq.linemedia.ru/byistraya-natyazhka-vyor/
http://habrahabr.ru/post/162881/

Битрикс не уникален, практически все CMS (Drupal, Wordpress) написаны гм.. людьми не особо знакомыми с ООП, паттернами, промышленной разработкой, в общем по ощущениям их пишут какие-то студенты-самоучки в плохом смысле этого слова. Даже если там применяется ООП, то часто неправильно. Ну и упор в CMS делается на редактирование через админку, а не программирование.

По моему опыту, пока твой шаблон по структуре соответствует стандартному, все будет хорошо, но как только ты захочешь сделать что-то нестандартное, тебя ждет боль. Я не знаю насчет битрикса, но платные CMS иногда содержат закрытый (обфусцированный) код, я с такой CMS когда-то работал и в итоге было проще некоторые вещи делать яваскриптом, изменяя текст страницы после загрузки, чем разобраться как это сделать средствами CMS. А в той CMS с которой я работал гении придумали свой язык шаблонов (без циклов и ветвлений разумееся и без htmlspecialchars), сами шаблоны хранились в базе и редактировать их можно было только через админку (что исключало возможность положить их в CVS или деплоить на свервер скриптом, все руками).
#216 #450798
>>450718

Ну и не знаю, можно ли делать какие-то выводы, но вот например Битрикс ищет разрабочика за 20 000 р (~350 долл.): http://www.1c-bitrix.ru/about/job.php#webdev

Не факт конечно что он над самой CMS будет работать, ну и может у них требования не высокие, но все же, у них некоторое редакции битрикса дороже стоят чем зарплата этого разработика.
#217 #450803
>>450313

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

> Теперь я хочу сделать сортировку стримов ГГ по количеству зрителей


Отсортируй сам на стороне php, там есть sort, usort и еще куча похожих функций.

>>450674

DOM не загружает файлы из интернета. Ты должен загрузить его сам.

Тебе нужен HTTP клиент.

Удобнее всего использовать для этого библиотеку вроде Guzzle ( https://github.com/guzzle/guzzle ). Преимущество что она сама и загружает все, и ошибки обрабатывает.

Еще можно загрузить файл через curl (минус — придется возиться с настройкой, обработкой ошибок самому) или даже через file_get_contents('http://example.com/1.txt') но в этом случае если например тебе захочется отладить код или ошибки, это будет малореально сделать.

Потому я бы делал через Guzzle.

Хорошо бы кешировать файл на диске чтобы не обращаться к серверу много раз. У Guzzle есть готовый плагин для этого (потому надо использовать популярные библиотеки а не писать велосипеды на курле): https://github.com/guzzle/cache-subscriber

Причем я подозреваю там можно его как-то настроить чтобы он не слал запрос 304, а просто принудительно все кешировал.
#218 #450807
>>450499

Проверь нет ли пробелов или пустых строк перед <?php

>>450629

> $this->fullName = $this->name . " " . $this->getShortName();


Если fullName всегда вычисляется из name то незачем заводить такое свойство и хранить его. Ты всегда можешь вызвать метод.

А в твоем случае надо как-то отслеживать, если имя поменялось, и менять fullName. Проще не хранить его вообще.

> public function getNormalHoursWorked()


> public function getOverHoursWorked()


Одну из этих функций можно упростить, посчитав например normalHours как общее число часов - переработка.

> $spases = array_fill(0, ($length - $strLength - 1), " ");


Есть str_repeat (она поддерживает кириллицу и любые символы).

Так, вообще неплохо. Исправь замечания и переходи к более сложной задаче.
#219 #450809
>>450653

Ты не понимаешь что такое объект. Объект в программировании — это экземпляр класса. Массив им не является.

В PHP массив это ассоциативный упорядоченный массив. Почему бы и нет.

А объекты и классы в PHP есть настоящие, в отличие от JS.

>>450658

В JS это называют не только объект, а пишут «хеш» (видимо сокращение от хеш-таблицы), «map» или «словарь».

В PHP есть настоящие классы и объекты, наследование, итнтерфейсы и все прочее, и с этим дела лучше чем в JS где классы обещают завезти только в ES6.

>>450657

array_map работает так: она создает новый массив, значения в котором пропущены через функцию:

new = fn(old);

Старый массив остается неизменным.

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

Почему она должна возвращать массив а не SplStporage? Потому что в SplStorage нельзя хранить строки.

array_filter создает новый массив, содержащий только значения одобренные callback функцией. В нашем случае filter позволяет отобрать часть объектов. Можно сделать чтобы она возвращала SplStotrage, можно чтобы массив.

> Я запутался =_=


Функция array_map не должна менять исходный массив, а создавать новый. Твой код делал непонятно что.

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


filter отбирает часть коллекции по условию. Сами значения коллекции он не меняет. Ты читал мануал по array_filter/array_map?

Чтобы поменять значения в объектах нам нужен либо обычный цикл, либо аналог array_walk.

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


Если ты изменишь поле объекта то новый объект от этого не появится. Новый объект создается только через new или clone. И в ООП в 99% случаев тебе это не нужно, создавать новые объекты из существующих.

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

Реальные случаи где нужны map/filter это получение массива значений и отбор части объектов по условию.
#219 #450809
>>450653

Ты не понимаешь что такое объект. Объект в программировании — это экземпляр класса. Массив им не является.

В PHP массив это ассоциативный упорядоченный массив. Почему бы и нет.

А объекты и классы в PHP есть настоящие, в отличие от JS.

>>450658

В JS это называют не только объект, а пишут «хеш» (видимо сокращение от хеш-таблицы), «map» или «словарь».

В PHP есть настоящие классы и объекты, наследование, итнтерфейсы и все прочее, и с этим дела лучше чем в JS где классы обещают завезти только в ES6.

>>450657

array_map работает так: она создает новый массив, значения в котором пропущены через функцию:

new = fn(old);

Старый массив остается неизменным.

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

Почему она должна возвращать массив а не SplStporage? Потому что в SplStorage нельзя хранить строки.

array_filter создает новый массив, содержащий только значения одобренные callback функцией. В нашем случае filter позволяет отобрать часть объектов. Можно сделать чтобы она возвращала SplStotrage, можно чтобы массив.

> Я запутался =_=


Функция array_map не должна менять исходный массив, а создавать новый. Твой код делал непонятно что.

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


filter отбирает часть коллекции по условию. Сами значения коллекции он не меняет. Ты читал мануал по array_filter/array_map?

Чтобы поменять значения в объектах нам нужен либо обычный цикл, либо аналог array_walk.

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


Если ты изменишь поле объекта то новый объект от этого не появится. Новый объект создается только через new или clone. И в ООП в 99% случаев тебе это не нужно, создавать новые объекты из существующих.

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

Реальные случаи где нужны map/filter это получение массива значений и отбор части объектов по условию.
#220 #450825
>>450658
В JS массив - встроенный объект, плохо ты его учил раз такого не знаешь.
#221 #450865
Вечер в хату.
Может кто подсказать как реализовать враппер в yii?
#222 #450885
никак не могу разобраться- не устаналивается
mbstring . сам файл есть , пусть стандартный , в файле extension=php_mbstring.dll раскомменчен , но в php.info модуль не появляется. Как это лечить?
#223 #450890
>>450885

>никак


>разобраться- не устаналивается


> .


> ,

#224 #450891
Первое задание по CSS:
http://jsfiddle.net/xf8bLowt/
#225 #450895
>>450891
Упс, забыл про текст: http://jsfiddle.net/xf8bLowt/2/
#226 #450898
>>450890
Спасибо, теперь по теме подскажи.
#227 #450899
Почему вот этот код не хочет выполняться?

<?php

error_reporting(-1);

$dollars = 200; / Число долларов /
$exchangeRate = 32.24; / Курс обмена /
$roubles = $dollars * $exchangeRate

echo "$dollars долларов можно обменять на $roubles рублей";

О чем я забываю?
#228 #450901
>>450899
Точку с запятой после $roubles?
#229 #450902
>>450899

>$roubles = $dollars * $exchangeRate;

#230 #450904
>>450902
>>450901
ВОТ ТАК ОБОСРАМС ТАК ОБОСРАМС
Чую таких в моей карьере будет еще много.
#231 #450905
>>450904
Сообщение об ошибках смотри, там же написано в какой строчке ошибка.
#232 #450906
>>450904
Включи отображение ошибокж
#233 #450907
>>450906
>>450905
Ошибка выполнения\ttime: 0.02 memory: 24448 signal:-1
Вот такое пишет, как вообще их расшифровывать?
#234 #450908
>>450907
Как ты вообще php запускаешь?
#235 #450909
>>450908
Пока что через ideone
29 Кб, 790x436
#236 #450910
>>450907
Я так понял ты на айдеоне код запускаешь. Он пишет ошибки внизу, я выделил красным. Видишь, написано in line 8? Значит на 8ой строке ошибка, точнее перед 8ой строкой нет точки с запятой.
#237 #450912
>>450910
Спасибо за разъяснение тугодуму
#238 #450914
>>450909

>ideone


Тогда ничем помочь не могу - не сталкивался с ним.
Ставь все локально и настраивай как тебе угодно будет.
#239 #450926
>>449862
php файл лежит в www , там папка test , в vhosts.conf я дописал Listen 8122 , ну и прописал путь на эту папку test.
Пишу в браузере путь на папку , там выбираю нужный.
Там еще куча мелких файлов , чисто php , они грузятся нормально, а этот нет.

Вот я не до конца понимаю когда в html файле php код как его правильно запускать.
#240 #450935
>>450807

>А в твоем случае надо как-то отслеживать, если имя поменялось, и менять fullName. Проще не хранить его вообще.


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

>Есть str_repeat (она поддерживает кириллицу и любые символы).


Когда писал эти функции я бегло пробежался по главе учебника со стороками, но не нашел там ничего, поэтому сделал как в голову пршло, не думаю что мой метод был плох, просто лишняя строчка и действие. В общем переделал код, спасибо за пояснения. Улучшил еще вывод зп как по мне, сразу видно из чего составляется зп
#242 #450937
>>450926
Ну у тебя должен быть настроен apache + php
и все это должно быть запущено
далее php код в файле должен стоять внутри
<?php
...
?>
И тогда ты просто в браузере открываешь этот свой html файл и у тебя интерпритатор выполняет все.
#243 #450947
>>450865

Враппер чего? Пиши подробнее, телепаты в отпуске. Ну и проверь что ты загуглил вопрос сначала.
#244 #450949
>>450885

> в файле extension=php_mbstring.dll раскомменчен


В каком файле? Ты уверен что это тот файл который используется как конфиг (посмотреть можно в phpinfo в loaded config file). Сервер перезапустил?
#245 #450951
>>450907

ideone пишут ошибки внизу. Если ты запускаешь код кнопкой ideone it то не пишет пока не обновишь страницу.
#246 #450952
>>450926

> Пишу в браузере путь на папку


как выглядит путь?

file:///c:/files... (неправильный ответ)
http://localhost/... (правильный)
#247 #450986
Есть такая проблема, если я пишу так:

class Db {

protected $host = "localhost";
protected $user = "root";
protected $pass = "";
protected $dbname = "journal";
public $mysqli;

function __construct() {
$this->open_connection();
}

function open_connection() {
$this->mysqli = new mysqli($this->host, $this->user, $this->pass, $this->dbname);
}
}
class Student extends Db {

function addStudent($name, $lastname, $pol) {
$result = $this->mysqli->prepare("INSERT INTO student(name, lastname, pol) VALUES (?, ?, ?)");
$result->bind_param("sss", $name, $lastname, $pol);
$result->execute();
}
}
$student = new Student();
$student->addStudent("Леонид", "Аристархов", "M");

То всё работает нормально, но если я добавлю пару свой в class Student и напишу там функцию конструктор, всё перестанет работать так как исчезнет подключение к базе данных? В чём проблема? И если я решаю задачу про студентов в стиле ООП, то как кстати лучше делать все параметры студента записывать в свойства объекта, или просто добавлять их в методы как обычные переменные?
#247 #450986
Есть такая проблема, если я пишу так:

class Db {

protected $host = "localhost";
protected $user = "root";
protected $pass = "";
protected $dbname = "journal";
public $mysqli;

function __construct() {
$this->open_connection();
}

function open_connection() {
$this->mysqli = new mysqli($this->host, $this->user, $this->pass, $this->dbname);
}
}
class Student extends Db {

function addStudent($name, $lastname, $pol) {
$result = $this->mysqli->prepare("INSERT INTO student(name, lastname, pol) VALUES (?, ?, ?)");
$result->bind_param("sss", $name, $lastname, $pol);
$result->execute();
}
}
$student = new Student();
$student->addStudent("Леонид", "Аристархов", "M");

То всё работает нормально, но если я добавлю пару свой в class Student и напишу там функцию конструктор, всё перестанет работать так как исчезнет подключение к базе данных? В чём проблема? И если я решаю задачу про студентов в стиле ООП, то как кстати лучше делать все параметры студента записывать в свойства объекта, или просто добавлять их в методы как обычные переменные?
#248 #451000
Тест на 2 левел:
----Клавиша-shift--------
http://ideone.com/HIkv00
----Yoda-Speak-----------
http://ideone.com/6ampes
----Числа-прописью------
http://ideone.com/nmjiUV
----Калькулятор----------
http://ideone.com/ZjAixJ
--------------------------
Требую конструктивной критики.
#249 #451008
>>450986

>но если я добавлю пару свой в class Student и напишу там функцию конструктор


Потому что в конструкторе наследника нужно вызывать parent::__construct().
И я не думаю, что тебе нужен класс Db только лишь для подключения к базе данных. Проще и логичнее будет передать базу через конструктор $student = new Student($mysqli).

>как кстати лучше делать все параметры студента записывать в свойства объекта


Какие параметры? Если ты про те, что являются полями в таблице, то да.
#250 #451010
>>450986
>>451008
И лучше используй PDO вместо mysqli, шагай в ногу со временем.
#251 #451011
По поводу задачи про студентов, поясните аноны, вот допустим я передал из формы данные в скрипт, там всё совершилось, в этом случае я так понимаю надо сделать перенаправление на страницу где выводится список студентов, но как его сделать если у меня уже выведена форма? Выскочит же sent by.... или лучше сделать страницу обработчик формы в которой не будет ХТМЛ, но в таком случае в 2 страницы я уже не вложусь, так как их будет как минимум три (там же ещё список студентов)
#252 #451014
>>451008
Спасибо

>Проще и логичнее будет передать базу через конструктор $student = new Student($mysqli).


В этом случае для каждого объекта будет свою подключение?
#253 #451027
>>451014
Подключение будет одно $dbh = new PDO($dsn, $user, $password), но передавать ты его сможешь разным объектам.
#254 #451080

> <img src="<?= Thumbnail::link('/image/uploads/1234567.png', 400, 300, Thumbnail::MODE_CROP) ?>">


Может кто-нибудь разобрать по частям написанное?
#255 #451083
>>451080
Что конкретно не понятно?
#256 #451089
>>451083

> Thumbnail::link()


Что означает эта запись и чем является каждый её компонент?
#257 #451092
>>451089
Вызов статического метода класса

>Thumbnail


Класс

>link()


Метод

>('/image/uploads/1234567.png', 400, 300, Thumbnail::MODE_CROP)


Аргументы. Первый очевидно урл, второй и третий размеры, четвертый константа
#258 #451094
>>451089
Thumbnail — класс.
link — статичный метод класса.
В скобках параметры необходимые для работы метода (исходная картинка, ширина превью, высота превью, метод преобразования).
Метод должен отдать ссылку на превьюшку.
#259 #451095
>>451089
Спасибо.
#260 #451096
#261 #451106
>>450657
http://ideone.com/VGQDq5

//Я думал, object_map
Я перепутал там, извини.

>>450809
Может это покажется глупо, но я не согласен что в нашем случае object_map не должен менять значения. Возможно он должен возвращать массив, но поменять исходные значения он тоже должен, иначе в будущем будет не удобно вызывать новые свойства через этот массив.
#262 #451163
>>450895

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

>>450936

Ок, переходи ко второй задаче про вектор.

>>450986

А что это за странный паттерн проектирования для работы с БД? Ты урок https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md читал?

В твоем случае плохо:

— параметры соединения с БД прописаны в классе
— у функций не проставлено private/public
— название класса неправильное. можно подумать что класс Student хранит информацию о студенте, но это не так
— каждый новый экземпляр Student создает свое соединение с Бд
— неясно, а что будет возвращать фукнция чтения студентов из БД? Массивы? Тогда это не очень-то и похоже на ООп

> И если я решаю задачу про студентов в стиле ООП, то как кстати лучше делать все параметры студента записывать в свойства объекта, или просто добавлять их в методы как обычные переменные?


Лучше прочитать урок по ссылке и сделать как там советуется, либо сделать по-другому, но аргументировать почему и какие преимущества у твоего подхода.
#263 #451170
>>450986

Названия классов неправильные. Вчитайся сам:

> class Student extends Db



Студент наследуется от БазыДанных. Это как? Студент — это улучшенная версия БазыДанных? Это показывает что ты неправильно выбрал названия для классов. Например класс Db правильнее назвать DbConnector а Student как StudentDbConnector или как-то так. Ну а еще лучше переписать нормально.

>>451011

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


Не надо спешить выводить форму. Ты урок по работе с формами читал? https://github.com/codedokode/pasta/blob/master/forms.md

> но в таком случае в 2 страницы я уже не вложусь, так как их будет как минимум три (там же ещё список студентов)


ну и пусть.

>>451106

> Может это покажется глупо, но я не согласен что в нашем случае object_map не должен менять значения


Суть функции array_map в том что она создает новый массив (на основе пропущенных через функцию значений). Зачем она должна менять исходный? Какая от этого польза? Приведи пример как ее можно использовать?

От этого только появляются лишние побочные эффекты.

Вот мой пример использования array_map. на вход она получает массив студентов, на выходе дает массив фамилий:

$surnames = $storage->map(function ($student) {
return $student->getSurname( );
});

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

> иначе в будущем будет не удобно вызывать новые свойства через этот массив.


Вызывать свойства через массив — это как?

> public static function object_filter(callable $c, $objects) {


Зачем передавать $objects если мы можем использовать $this и сделать метод не статическим? Ты пытаешься сделать отдельный набор функций, в то время как мы можем просто расширить класс нашими методами. Кроме редких случаев, статические методы в ООП это неудобно.

> object_filter


Давай называть как принято в PSR, без подчеркиваний.

> SplObjectFunctions


Я бы назвал по-другому, например, ExtendedSplObjectStorage или как-то так.
#263 #451170
>>450986

Названия классов неправильные. Вчитайся сам:

> class Student extends Db



Студент наследуется от БазыДанных. Это как? Студент — это улучшенная версия БазыДанных? Это показывает что ты неправильно выбрал названия для классов. Например класс Db правильнее назвать DbConnector а Student как StudentDbConnector или как-то так. Ну а еще лучше переписать нормально.

>>451011

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


Не надо спешить выводить форму. Ты урок по работе с формами читал? https://github.com/codedokode/pasta/blob/master/forms.md

> но в таком случае в 2 страницы я уже не вложусь, так как их будет как минимум три (там же ещё список студентов)


ну и пусть.

>>451106

> Может это покажется глупо, но я не согласен что в нашем случае object_map не должен менять значения


Суть функции array_map в том что она создает новый массив (на основе пропущенных через функцию значений). Зачем она должна менять исходный? Какая от этого польза? Приведи пример как ее можно использовать?

От этого только появляются лишние побочные эффекты.

Вот мой пример использования array_map. на вход она получает массив студентов, на выходе дает массив фамилий:

$surnames = $storage->map(function ($student) {
return $student->getSurname( );
});

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

> иначе в будущем будет не удобно вызывать новые свойства через этот массив.


Вызывать свойства через массив — это как?

> public static function object_filter(callable $c, $objects) {


Зачем передавать $objects если мы можем использовать $this и сделать метод не статическим? Ты пытаешься сделать отдельный набор функций, в то время как мы можем просто расширить класс нашими методами. Кроме редких случаев, статические методы в ООП это неудобно.

> object_filter


Давай называть как принято в PSR, без подчеркиваний.

> SplObjectFunctions


Я бы назвал по-другому, например, ExtendedSplObjectStorage или как-то так.
#264 #451172
>>451011

Ты читал подробное задание с комментариями и советами? https://github.com/codedokode/pasta/blob/master/student-list.md Там много полезного.

>>451000

> Клавиша shift


А что с форматированием? Где оступы? тяжело же читать. Надо через phpformatter прогонять либо использовать редактор умеющий форматировать код.

> mb_substr($text,1,mb_strlen($text))


Третий аргумент можно не указывать если тебе нужен текст до конца строки.

Не исправляются лишние пробелы вокруг запятой: http://ideone.com/83hWyi

Не делаются заглавными буквы после воскл. знака: http://ideone.com/fgE9Cg
#265 #451176
>>451000

> Yoda-Speak



> $arr = preg_split("/ /",preg_replace("/,/u","",$value),0,PREG_SPLIT_NO_EMPTY);


Это лучше на 2 строки разбить, слишком много в одной строке

> "/,/u",""


> "/ /"


Если тебе не нужна мощь регулярных выражений, лучше использовать explode и str_replace.

Так, работает верно.

Числа-прописью

А что с выравниванием кода? Надо через phpformatter пропустить.

> if(preg_match("/^1$|21|31|41|51|61|71|81|91/",


С числами надо работать с помощью математических функций, а не строчных.

Это просто, вот 2 волшебных команды:

// получить последние 3 цифры числа:
echo 1234567 % 1000; // выведет 567

// получить число миллионов
echo floor(1234678 / 1000000); // выведет 12

Комбинируя их, можно получить что угодно.

> && $word1=="тысяча"


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

> 21|31|41|51|61|71


Это можно записать намного короче. делал ли ты задания на регулярки?

> $number-$thousand


У тебя это раз 5 встречается — значит надо сделать переменную, а не копипастить.

> ($number - $millions*1000000)


Тут надо применить деление с остатком %

Также, у тебя там местами не один, а два пробела между словами. Один из вариантов — собирать фразу не в переменной-строке, а в переменной-массиве куда класть по одному слову или фразе за раз.
#265 #451176
>>451000

> Yoda-Speak



> $arr = preg_split("/ /",preg_replace("/,/u","",$value),0,PREG_SPLIT_NO_EMPTY);


Это лучше на 2 строки разбить, слишком много в одной строке

> "/,/u",""


> "/ /"


Если тебе не нужна мощь регулярных выражений, лучше использовать explode и str_replace.

Так, работает верно.

Числа-прописью

А что с выравниванием кода? Надо через phpformatter пропустить.

> if(preg_match("/^1$|21|31|41|51|61|71|81|91/",


С числами надо работать с помощью математических функций, а не строчных.

Это просто, вот 2 волшебных команды:

// получить последние 3 цифры числа:
echo 1234567 % 1000; // выведет 567

// получить число миллионов
echo floor(1234678 / 1000000); // выведет 12

Комбинируя их, можно получить что угодно.

> && $word1=="тысяча"


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

> 21|31|41|51|61|71


Это можно записать намного короче. делал ли ты задания на регулярки?

> $number-$thousand


У тебя это раз 5 встречается — значит надо сделать переменную, а не копипастить.

> ($number - $millions*1000000)


Тут надо применить деление с остатком %

Также, у тебя там местами не один, а два пробела между словами. Один из вариантов — собирать фразу не в переменной-строке, а в переменной-массиве куда класть по одному слову или фразе за раз.
#266 #451178
умение верстать сильно критично? Просто не хочу тратить кучу времени на все эти миллионы css свойств и нюансов.
#267 #451179
>>451000

> Калькулятор



> $op = $char;


>\t$number = 0;


Это повторяется раз 5. Избавься от копипасты.

Огромный if надо бы перевернуть ради того чтобы было проще читать код.

Если у тебя есть код

if (условие) {
50 строк
} else {
2 строки
}

То его надо попробовать перевернуть, чтобы было

if (не выполняется условие) {
2 строки
} else {
50 строк
}

А еще лучше

if (не выполняется условие) {
2 строки;
return или exit;
}

50 строк;
#267 #451179
>>451000

> Калькулятор



> $op = $char;


>\t$number = 0;


Это повторяется раз 5. Избавься от копипасты.

Огромный if надо бы перевернуть ради того чтобы было проще читать код.

Если у тебя есть код

if (условие) {
50 строк
} else {
2 строки
}

То его надо попробовать перевернуть, чтобы было

if (не выполняется условие) {
2 строки
} else {
50 строк
}

А еще лучше

if (не выполняется условие) {
2 строки;
return или exit;
}

50 строк;
#268 #451182
>>451178

Смотря где, в разных компаниях по разному.

Но хорошо бы уметь чтобы например при правке кода не ломать костылями верстку которую делал верстальщик. Да и разве это долго? С нашими заданиями на CSS/HTML ты недели за 2-3 научишься неплохо верстать.

Ну и знать основы HTML/CSS в любом случае надо.
#269 #451190
>>451170

>Суть функции array_map в том что она создает новый массив (на основе пропущенных через функцию значений). Зачем она должна менять исходный? Какая от этого польза? Приведи пример как ее можно использовать?


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

>Вызывать свойства через массив — это как?


Ой. Ну я имел ввиду, что новые значения свойств сложенные в массив, то есть вот так:

$property = $object->property;
$array[] = $propery x 2;

Согласись, что если бы нам в будущем понадобилось свойство propery с новым значением, было бы удобней вызвать его с помощью класса(с помощью метода или напрямую), чем писать = array[0]; По крайней мере мне кажется, что было бы удобней через класс.

Прошу прощение за то что неясно выразился в начале. Надеюсь сейчас я более менее ясно понятно.
someApprentice #270 #451193
>>451190

>Надеюсь сейчас я более менее ясно понятно.


Б-же, какой же я...

Надеюсь сейчас более менее понятно*
#271 #451206
>>451190

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


Для этого есть другая функция: array_walk (в разных языках и библиотеках она называется each, forEach, iterate). Сделай и ее тогда.

> Согласись, что если бы нам в будущем понадобилось свойство propery с новым значением, было бы удобней вызвать его с помощью класса(с помощью метода или напрямую), чем писать = array[0]; По крайней мере мне кажется, что было бы удобней через класс.


В таком случае нам не нужен map вообще, просто делаем

$object = $storage[0];

И в любой момент обращаемся к $object.
#272 #451225
>>451206
http://ideone.com/VGQDq5

>>451170

>В таком случае нам не нужен map вообще, просто делаем


>


>$object = $storage[0];


>


>И в любой момент обращаемся к $object.


Ну а если у нас будет тысяча объектов в SplObjectStorage и всем им надо поменять какое-то свойство? Как раз для этого и подошел мой способ.

Если честно, то мне кажется что моя функция objectMap не очень подходит для ООП. Может в каких-то редких случаях и пригодилось бы, но это уже были бы какие-то индивидуальные случаи. Если использовать её как клон array_map, то ты прав - она должна возвращать массив с новыми значениями. Но зачем нам этот массив если мы используем ООП? Поэтому я и говорю она не очень подходит для ООП, IMHO.
#273 #451310
Новичок в программировании, нужна ваша помощь.

В mysql БД передаю текст статьи, статья пишется через CKEditor, поэтому абзацы уже разделены тегом p.

На главной нужно сделать предпросмотр статей на главной (просто чтобы только первый абзац статьи выводился), поэтому хочу в отдельное поле БД сохранять этот первый абзац и его выводить в качестве предпросмотра. Как этот первый абзац отделить от всего текста (он ограничен тегом p) чтобы записать его в отдельное поле?
#274 #451313
Почему не хочет загружать файл?
https://gist.github.com/39d662f18599be21bbfd.git
#276 #451325
>>451317
enctype = "multipart/form-data" не там
#277 #451335
>>451317

знак "равно" в html-коде не отбивают пробелами, маня. не то чтобы это не работает, хоть пять их туда въеби - браузер сожрет любое говно. просто не красиво
#278 #451336
>>451325
>>451335
Ок. Благодарю.
#279 #451340
>>451310

>Как этот первый абзац отделить от всего текста (он ограничен тегом p) чтобы записать его в отдельное поле?


Но зачем? Читай уроки опа, там есть, например, такая замечательная штука, как регулярные выражения, с их помощью можно выводить только тот кусок текста, который тебе нужен (в данном случае от начала до тега p - /*<p>/). И не надо будет городить отдельное поле. Впрочем, если сильно хочешь, то можно и так, абзац отделишь с помощью тех же регулярок.
#280 #451342
Я поставил php на компьютер, как мне сделать, чтобы как в школе в паскале писать в консоль, и программа это читала? Нужно использовать стандартные потоки ввода-вывода, скорее всего, да?
#281 #451345
>>451342
Поставь денвер и не еби мозг.
#283 #451348
>>451345
Так то ж под шиндовс.
#284 #451351
Что-то я совсем тупой, как яваскриптом обнулить value всех элементов формы?
#285 #451355
>>451336
И всё равно чет не фурычит. Картинки не появляются в каталогах.
https://gist.github.com/uniunicorn/39d662f18599be21bbfd
#286 #451361
>>451355
P.S. Может быть, проблема в неправильной конфигурации php.ini?
На всякий случай:

> file_uploads = On


> upload_tmp_dir = "/var/www/tmp"


> upload_max_filesize = 20M


Остальное не трогал.
#287 #451362
>>451225

> Ну а если у нас будет тысяча объектов в SplObjectStorage и всем им надо поменять какое-то свойство? Как раз для этого и подошел мой способ.



Ты наверно невнимательно прочитал мой пост. Для этого есть другая функция, array_walk (она же each, forEach, iterate). map не для этого.

Вот посмотри например на JS библиотеку для работы с коллекциями underscore. там есть и each, и map:

http://underscorejs.ru/#each
http://underscorejs.ru/#map

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

> Но зачем нам этот массив если мы используем ООП? Поэтому я и говорю она не очень подходит для ООП, IMHO.


Ну представь такие задачи:

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

- дан массив студентов. Найти возраст самого младшего и самого старшего из них.

- дан массив работников. Найти общую сумму всех их зарплат

Тут подойдет функция map. Хотя конечно эти же задачи и через reduce решаются.
#288 #451364
>>451225

> Но зачем нам этот массив если мы используем ООП?


Массив использовать для хранения коллекции объектов вполне можно, почему нет? в PHP вроде все равно нет объектов-массивов (хотя есть, ArrayObject: http://php.net/manual/ru/class.arrayobject.php )

Плохо когда массивы пытаются использовать как аналоги объектов вроде

$student = [
'name' => 'Иван'
];

$students[] = student;

do_something($students);
#289 #451366
>>451313

Ошибки выводятся? У тебя включено отображение ошибок?

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

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

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

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

Тебе надо запускать программу из командной строки командой

c:/php/php.exe d:/files/1.php

Вот гайд по командной строке: https://gist.github.com/codedokode/10539568

Если php у тебя в PATH то можно писать просто php и если программа в текущем каталоге то можно писать просто 1.php

Вместо денвера советую ставить все самому, и Апач, и MySQL, а пока можешь так запускать.

> в паскале писать в консоль, и программа это читала


Надо открыть и читать STDIN:

http://php.net/manual/ru/features.commandline.io-streams.php
http://php.net/manual/ru/wrappers.php.php

заметь что в php много функций чтения. Это

fread
fgets
file_get_contents (прочитать все данные из потока)
#290 #451369
>>451342

Тебе надо запускать программу из командной строки командой

c:/php/php.exe d:/files/1.php

Вот гайд по командной строке: https://gist.github.com/codedokode/10539568

Если php у тебя в PATH то можно писать просто php и если программа в текущем каталоге то можно писать просто 1.php

Вместо денвера советую ставить все самому, и Апач, и MySQL, а пока можешь так запускать.

> в паскале писать в консоль, и программа это читала


Надо открыть и читать STDIN:

http://php.net/manual/ru/features.commandline.io-streams.php
http://php.net/manual/ru/wrappers.php.php

заметь что в php много функций чтения. Это

fread
fgets
file_get_contents (прочитать все данные из потока)
17 Кб, 533x312
#292 #451377
Не совсем понял, что требуется в этом задании. Если я задаю max-width: 600px; - при любом меньшем значении min-width - уменьшение окна упирается в max-width, размеры по высоте не заданы, слева margin от 10 до бесконечности - это видимо margin: 0 auto; насколько я понял.
http://jsfiddle.net/x2quc8cw/ это явно не то, что нужно, но условия написаны непонятно.
#293 #451381
>>451377

Надо чтобы в широком окне браузера блок был не шире 600px и по центру, а в узком подстраивался под ширину окна. То есть как у тебя и сделано.

Но тут есть небольшие замечания:

Нет рамки.

> font-size: 14px;


Если пишешь font size, пиши и line height.

> max-width: 600px;


Внешняя ширина блока тогда будет 620px
#294 #451382
>>451366
Лог настроил, спасибо, буду разбираться.
#295 #451384
>>451382

Поставь еще в начале php кода

var_dump($_FILES);

чтобы увидеть что приходит.
#296 #451386
>>451381
У меня видимо само окно браузера меньше не сжимается независимо от содержимого, не могу проверить как и что.
#297 #451390
>>451386

На jsfiddle можно размер панелек менять перетаскиванием и там смотреть.
#298 #451393
ОП, любитель глобальных переменных с задачкой про поиск маршрута из прошлого треда опять здесь.
http://ideone.com/vlwG0X
Убрал глобальные переменные, внедрил значение $pathDone по умолчанию, но возникла проблема. Находится только один маршрут, т.е. рекурсия работает, но функция не перебирает все варианты пути из станции. Может у меня глаз уже замылился, не могу найти причину такого поведения, несколько раз пробовал с самого начала переписать, все бестлоку.
#300 #451396
>>451384
В следующий раз буду иметь в виду.
С этой проблемой уже разобрался.
#301 #451398
>>451393

> foreach ($paths[$point] as $station => $pathInfo) {


> ....


> return makeOneStep($paths, $time, $point, $target, $pathDone);



Посмотри внимательно. Ты берешь первую точку, рассчиытваешь маршрут через нее и выходишь из функции (return), не проверив путь через вторую, третью и т.д. точки.

Надо по другому. Надо не возвращать первый найденный маршрут , а сложить все маршруты в массив. А потом выбрать из него кратчайший и вернуть.
#302 #451403
>>451398

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


Наверное сейчас глупость спрошу, но как заполнить массив внутри рекурсивной функции не применяя глобальные переменные? Я эти переменные изначально для этого и использовал, сейчас идея в том чтобы возвращать маршруты из функции в массив по одному и потом с ними разбираться.
#303 #451405
>>451403

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



$routes = [];

foreach (...) {
$route = findroute(....);
$routes[] = $route;
}

Такой вариант не годится?
#304 #451406
>>451405
Если объявлять массив в функции, он будет обнуляться каждый раз, если вне функции, то надо вводить дополнительный аргумент. Или это допустимо?
#305 #451407
http://rghost.ru/72qLY92gC ОПчик, вот мой макет. Я правда не разобрался как размер шрифта определять в псд, поэтому наверное так криво получилось.
#306 #451410
>>451406

> Если объявлять массив в функции, он будет обнуляться каждый раз, если вне функции, то надо вводить дополнительный аргумент. Или это допустимо?


Это временный массив. Он нужен только чтобы сохранить найденные пути через соседние точки, выбрать кратчайший и вернуть. Зачем его сохранять?
#307 #451413
>>451407

загружать лучше на gist.github.com (можно хоть перетаскиванием). А если ты осилишь Github Pages то можешь даже сделать чтобы сайт в браузере можно было просмотреть: https://pages.github.com/

Попробуй пока разобраться.
#308 #451415
>>451413
Шрифты тоже можно загружать?
#309 #451416
>>451410
Ок, подумаю.
#310 #451417
>>451415

да, по моему
#311 #451419
>>451415

Чтобы загрузить сайт на github pages, надо создать на гитхабе репозиторий, склонировать его к себе, добавить туда файлы и запушить на гитхаб. То есть надо пользоваться гитом. Вот тебе книжка в помощь:

http://git-scm.com/book/ru/v2/

Гит тебе все равно наверно еще пригодится.

Если что можешь вопросы задавать.

Также, вот гайд по командной строке: https://gist.github.com/codedokode/10539568

Если ты под Windows и устанавливаешь msys git то командная строка git bash имитирует линуксовую, а не виндовую, и тебе надо читать именно про нее (про линуксовую комнадную строку).
#312 #451485
ОП, а как безопасно загружать файл на сервер?
Мы в прошлый раз вскользь коснулись вопроса, но не стали вскрывать эту тему.
Например, если пользователь вместо картинки подгрузит php или js-скрипт.
Как себя обезопасить?
Я прочитал статьи на хабре
http://habrahabr.ru/post/44610/
http://habrahabr.ru/post/44615/
Но панацеи там не обнаружил.

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


Не понял, разве это обезопасит, если я вынесу upload в директорию выше? Чужой скрипт на сервере, уже неприятно.
Запрет доступа вообще бессмысленный. Допустим, в Yii к директории protecred нельзя обратиться, так и картинка не будет отображаться в браузере, если я туда сохраню.

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


врети, быть такого не может

Может, переименование файла спасет?
$filename = md5(microtime() . rand(0, 9999));
Тут гарантируется уникальность имени?
Или хакир все равно вычислит свой высер по хеш-сумме?
#313 #451507
Сколько нужно учить эту хуйню чтобы взяли работать?(или нужно сперва освоить html?)
#314 #451513
>>451507

>эту хуйню


С таким подходом тебя вообще не возьмут программистом.
Иди лучше наверни cms.
#315 #451527
>>451513
что это?
#316 #451540
Что то я несовсем вехал во взаимодействие yii2, композера, и папки Vendor.

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

А что должен делать я в случае использования композера, создавать такую же структура, как та что в вендоре, но новую и просто подключать в неё yii2 никак не меняя содерживое вендор?

Разясни пожалуйста, анон.
#317 #451551
>>450947
Враппер модели, что бы переписать instantiate в CActiveRecord. Я просто наследовал и переопределил, но так ли надо было сделать?
#318 #451554
>>451540
1. Распаковать
2. Зайти в папку в терминале/консоли
3. composer update что бы скачать все что понадобится
4. все

Это мои догадки
#319 #451584
В общем, наверное, и к вам стоит запостить этот пост. Надо отправить post запрос. Подробности тут.
>>451568
#320 #451627
>>451513
А вообще? С учётом того, что с погромированием знаком только по школе (сдавал ЕГЭ по информатике).
За какое время реально въехать и устроиться на работу, при условии, что относительно неглуп? ДС.

другой анон
#321 #451654
Анон, поделись удобными и хорошими сервисами типа https://stillmaintained.com/, https://travis-ci.org/ https://scrutinizer-ci.com/
#322 #451656
>>451362
>>451364
Наверно, мне потом придет понимание этого.

С кодом все верно?
#323 #451692
>>451310
>>451340

Это плохая идея, резать HTML регулярками. Она ведет к разным ошибкам. Нужно использовать библиотеку, понимающую структуру HTML, например DOM + XPath для вырезания.

Или можно попробовать взять более высокоуровневую библиотеку, например Symfony DomCrawler: http://symfony.com/doc/current/components/dom_crawler.html

>>451346

Ты наверно ссылку перепутал и дал то же самое что тут >>450895

>>451355

Ссылка не открывается (We seem to have missed the gist of that gist you were looking for). Могу посоветовать поставить var_dump для $_FILES и всех переменных которые исопльзуются чтобы посмотреть в чем дело. на линуксе так же может быть проблема с правами, но если ты включил отображение ошибок то увидишь сообщение.
someApprentice #324 #451696
>>448414
Переработал код. Поменял названия переменных на более понятные. Избавился от лишней копипасты. Код стал чище и красивей.

Единственное, почему-то не работает во второмАнтикризисномМетоде одна строка:
https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L80

Ошибка:
Fatal error: Call to a member function setLeader() on a non-object in C:\Program Files\xampp\www\Classes\Direction.php on line 80

Вот принт $newLeader:
Employee Object ( [name:Employee:private] => analyst [rang:Employee:private] => 2 [salary:Employee:private] => 1100 [coffee:Employee:private] => 75 [document:Employee:private] => 5 [leader:Employee:private] => )

Почему выдается ошибка о том что я вызываю функцию не к объекту, когда я обращаюсь именно к нему?
#325 #451697

>>451394

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

>>451407

Ты проверял свой HTML и CSS валидаторами? Проверь сам сначала:

HTML валидатор: http://validator.w3.org/#validate_by_input
CSS валидатор: http://jigsaw.w3.org/css-validator/

Твой код не обязан на 100% проходить проверку. Но для любых отступлений от стандарта должна быть причина.

Не забудь добавить DOCTYPE перед проверкой.

Вот объяснение некоторых ошибок http://htmlbook.ru/samhtml/validatsiya-dokumentov/ispravlenie-oshibok

Если что-то непонятно, пиши в тред.

Замечания:

— Нету DOCTYPE. Это значит что браузеры переключатся в режим совместимости с написанными в прошлом тысячелетии сайтами (Quirks mode) и будут отступать от стандартов при отображении страницы. Читай

http://www.webmascon.com/topics/coding/25a.asp
http://pepelsbey.net/pres/doctype/

> digital&branding


Читай про HTML сущности: http://htmlbook.ru/samhtml/tekst/spetssimvoly

Символы < > & надо писать через них. Делал ли ты 3-е задание из «Пути HTML»? Если пропустил то зря. Там все задания важны.

Кстати в Sublime эта ошибка подсвечивается красным.

> HOME</a>


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

> <p><h2>Consectetur</h2>


Нельзя ставить h2 внутрь p. Как заголовок может быть внутри абзаца текста?

> id="featuredworks"


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

> id="imagecontainer"


В CSS обычно используют минус для разделения слов: image-container. Также тебе наверно будет интересно и полезно почитать про подход к составлению названий классов под названием БЭМ:

https://ru.bem.info/articles/bem-for-small-projects/#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%91%D0%AD%D0%9C-%D0%B4%D0%BB%D1%8F-css
https://ru.bem.info/method/definitions/
http://frontender.info/MindBEMding/

> <div id="telephone"><p>0247 541 65 87</p></div>


> <div class="copyright"><p>


зачем тут тег <p>? По моему он лишний. Тег <p> обозначает абзац в тексте. Но тут у тебя явно абзацев нет, просто кусочек текста.

> <p>Vestibulum id ligula porta felis euismod semper, malesuada euismod.</p></div>


Лишний </div>

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

По самой странице. Она у тебя фиксированной ширины. Что за ерунда? Это не годится для нашего треда. Все должно тянуться. У людей разные браузеры и разные экраны.

Кнопки ALL GRAPHIC ILLUSTRATION MOTION надо сделать переключаемыми при нажатии за счет CSS3 (или яваскрипта).

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

Кнопки соцсетей должны быть ссылками и реагировать на наведение.

Логотип должен быть ссылкой

> font-family: 'reklame_script_regular_demoRg';


Название лучше было бы нормально записать, например Reklame-Script-Demo. Глаз спотыкается об подчеркивания и остутствие заглавных букв.

> body{


> width: 1663px;


Это неправильно. На узких экранах появляется прокрутка, на широких все смещено влево.

> font-size: 25px;


Когда задаешь font-size надо задавать line-height.

> font-family: 'Lato', Arial;


В конце принято писать стандартный шрифт: http://htmlbook.ru/css/font-family

> .slider span


Плохая идея использовать span в селекторе. Завтра верстальщик добавит еще span и твои стили на него применятся.

В логотипе буква W неправильно выровнена относительно надписи.

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

Под кнопкой «See portfolio» значительно меньший отступ чем у тебя. Важно соблюдать пропорции и отступы. На макете отступ под и над кнопкой одинаков, а у тебя нет.

Надпись «digital&branding agency» другого размера.

> nav


> word-spacing: 50px;


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

На макете «Consectetur» написано шрифтом без засечек, у тебя с засечками.

Надпись «Curabitur blandit tempus portitto» не такая бледная.

Кнопки «ALL GRAPHIC ILLUSTRATION MOTION» меньше чем у тебя.

Отступы под портфолио и в подвале не совпадают с макетом.

images/sprite3.jpg по моему сжат некачественно, видны артефакты сжатия. тут вообще наверно лучше PNG было применить.

У иконки андроида слева в руке какая-то полоска. Иконка с монитором обрезана сверху.

Когда делаешь спрайт, надо оставлять промежутки пикселей по 5-10 между картинками для защиты от ошибок и багов при масштабировании страницы. Для images/sprite2.jpg наверно лучше использовать PNG так как там мелкие детали и четкие границы. Тут по моему для всех картинок (кроме портфолио) лучше PNG использовать так как высокий контраст и мелкие иконки. Плюс, в PNG можно использовать прозрачность что облегчит например смену цвета или рисунка фона.

Названия картинкам лучше давать нормальные. Как догадаться что внутри sprite1.jpg?
#325 #451697

>>451394

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

>>451407

Ты проверял свой HTML и CSS валидаторами? Проверь сам сначала:

HTML валидатор: http://validator.w3.org/#validate_by_input
CSS валидатор: http://jigsaw.w3.org/css-validator/

Твой код не обязан на 100% проходить проверку. Но для любых отступлений от стандарта должна быть причина.

Не забудь добавить DOCTYPE перед проверкой.

Вот объяснение некоторых ошибок http://htmlbook.ru/samhtml/validatsiya-dokumentov/ispravlenie-oshibok

Если что-то непонятно, пиши в тред.

Замечания:

— Нету DOCTYPE. Это значит что браузеры переключатся в режим совместимости с написанными в прошлом тысячелетии сайтами (Quirks mode) и будут отступать от стандартов при отображении страницы. Читай

http://www.webmascon.com/topics/coding/25a.asp
http://pepelsbey.net/pres/doctype/

> digital&branding


Читай про HTML сущности: http://htmlbook.ru/samhtml/tekst/spetssimvoly

Символы < > & надо писать через них. Делал ли ты 3-е задание из «Пути HTML»? Если пропустил то зря. Там все задания важны.

Кстати в Sublime эта ошибка подсвечивается красным.

> HOME</a>


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

> <p><h2>Consectetur</h2>


Нельзя ставить h2 внутрь p. Как заголовок может быть внутри абзаца текста?

> id="featuredworks"


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

> id="imagecontainer"


В CSS обычно используют минус для разделения слов: image-container. Также тебе наверно будет интересно и полезно почитать про подход к составлению названий классов под названием БЭМ:

https://ru.bem.info/articles/bem-for-small-projects/#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0-%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%91%D0%AD%D0%9C-%D0%B4%D0%BB%D1%8F-css
https://ru.bem.info/method/definitions/
http://frontender.info/MindBEMding/

> <div id="telephone"><p>0247 541 65 87</p></div>


> <div class="copyright"><p>


зачем тут тег <p>? По моему он лишний. Тег <p> обозначает абзац в тексте. Но тут у тебя явно абзацев нет, просто кусочек текста.

> <p>Vestibulum id ligula porta felis euismod semper, malesuada euismod.</p></div>


Лишний </div>

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

По самой странице. Она у тебя фиксированной ширины. Что за ерунда? Это не годится для нашего треда. Все должно тянуться. У людей разные браузеры и разные экраны.

Кнопки ALL GRAPHIC ILLUSTRATION MOTION надо сделать переключаемыми при нажатии за счет CSS3 (или яваскрипта).

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

Кнопки соцсетей должны быть ссылками и реагировать на наведение.

Логотип должен быть ссылкой

> font-family: 'reklame_script_regular_demoRg';


Название лучше было бы нормально записать, например Reklame-Script-Demo. Глаз спотыкается об подчеркивания и остутствие заглавных букв.

> body{


> width: 1663px;


Это неправильно. На узких экранах появляется прокрутка, на широких все смещено влево.

> font-size: 25px;


Когда задаешь font-size надо задавать line-height.

> font-family: 'Lato', Arial;


В конце принято писать стандартный шрифт: http://htmlbook.ru/css/font-family

> .slider span


Плохая идея использовать span в селекторе. Завтра верстальщик добавит еще span и твои стили на него применятся.

В логотипе буква W неправильно выровнена относительно надписи.

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

Под кнопкой «See portfolio» значительно меньший отступ чем у тебя. Важно соблюдать пропорции и отступы. На макете отступ под и над кнопкой одинаков, а у тебя нет.

Надпись «digital&branding agency» другого размера.

> nav


> word-spacing: 50px;


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

На макете «Consectetur» написано шрифтом без засечек, у тебя с засечками.

Надпись «Curabitur blandit tempus portitto» не такая бледная.

Кнопки «ALL GRAPHIC ILLUSTRATION MOTION» меньше чем у тебя.

Отступы под портфолио и в подвале не совпадают с макетом.

images/sprite3.jpg по моему сжат некачественно, видны артефакты сжатия. тут вообще наверно лучше PNG было применить.

У иконки андроида слева в руке какая-то полоска. Иконка с монитором обрезана сверху.

Когда делаешь спрайт, надо оставлять промежутки пикселей по 5-10 между картинками для защиты от ошибок и багов при масштабировании страницы. Для images/sprite2.jpg наверно лучше использовать PNG так как там мелкие детали и четкие границы. Тут по моему для всех картинок (кроме портфолио) лучше PNG использовать так как высокий контраст и мелкие иконки. Плюс, в PNG можно использовать прозрачность что облегчит например смену цвета или рисунка фона.

Названия картинкам лучше давать нормальные. Как догадаться что внутри sprite1.jpg?
#326 #451701

>>451407

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



Берешь Text tool и щелкаешь один раз на текст. На панели текста появится размер и стиль шрифта. если панель не видна, открой ее через Window - Character.

Ну и сделай чтобы макет тянулся, например от 1024 до 1600. Если экран меньше то появляется линейка прокрутки, если больше то поля с краев а сайт центрируется (для этого достаточно правильно min/max-width поставить).

>>451485

Запустить код на сервере злоумышленник может только в 3 случаях:

1) он загрузил файл с расширением котрое вызывает подключение php интерпретатора напрмиер file.php

2) он загрузил файл в котором одно из расширений это php: file.php.rar (прикольная фишка Апача, правда? с ее помощью можно обходить проверку по рсширению)

3) он загрузил .htaccess файл

Решения:

- проверка расширений файла, например если ты принимаешь только картинки то проверяй расширение на список допустимых

- не пропускаем умников пытающихся загрузить file.php.rar

- отключаем выполнение php в папке загрузок ( http://habrahabr.ru/post/61842/ )

- отключаем выполнение htaccess в папке загрузок (это можно сделать только в конфиге веб-сервера директивой http://httpd.apache.org/docs/current/mod/core.html#allowoverride )

- запрещаем загрузку htaccess файлов

- загружаем файлы на отдельный сервер где не установлен php, а есть только nginx который не выполняет ни php код ни читает htaccess (так вроде делает вконтакте)

Теперь подумаем какие файлы несут нам угрозу:

- php файлы: запустив их злоумышленник выполняет любой код на сервере и полностью его контролирует
- htaccess файлы: злоумышленник может менять настройки сервера и делать что хочет
- html файлы: так как эти файлы находятся на одном домене с твоим сайтом то JS код в них может делать любые действия от имени пользователя, обходя в том числе CSRF защиту (он сможет прочитать CSRF токен из тела страниц на твоем сайте). Злоумышленник должен загрузить HTML файл и как-то заманить пользователя его открыть. Решение: загружаем пользовательские файлы на отдельный домен. Так делает Гугл ( http://whois7.ru/?q=googleusercontent.com ) и гитхаб ( http://whois7.ru/?q=http://githubusercontent.com/ ). Либо не принимаем html.

JS файлы угрозы не несут так как JS код не выполняется на сервере.

> Запрет доступа вообще бессмысленный. Допустим, в Yii к директории protecred нельзя обратиться, так и картинка не будет отображаться в браузере, если я туда сохраню.


Верно.

> Может, переименование файла спасет?


> $filename = md5(microtime() . rand(0, 9999));


> Тут гарантируется уникальность имени?


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

> Или хакир все равно вычислит свой высер по хеш-сумме?


Может быть у тебя где-то будет выдаваться имя файла, и хакер его найдет. Это не защита.

В общем, мне кажется, надо проверять расширения. Если ты принимешь картинки то только несколько разрешенных расширений, если любые файлы то принудительно ставь им например расширение .txt и убирай остальные точки из имени. Ну и запрети выполнение php кода в папке.
#326 #451701

>>451407

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



Берешь Text tool и щелкаешь один раз на текст. На панели текста появится размер и стиль шрифта. если панель не видна, открой ее через Window - Character.

Ну и сделай чтобы макет тянулся, например от 1024 до 1600. Если экран меньше то появляется линейка прокрутки, если больше то поля с краев а сайт центрируется (для этого достаточно правильно min/max-width поставить).

>>451485

Запустить код на сервере злоумышленник может только в 3 случаях:

1) он загрузил файл с расширением котрое вызывает подключение php интерпретатора напрмиер file.php

2) он загрузил файл в котором одно из расширений это php: file.php.rar (прикольная фишка Апача, правда? с ее помощью можно обходить проверку по рсширению)

3) он загрузил .htaccess файл

Решения:

- проверка расширений файла, например если ты принимаешь только картинки то проверяй расширение на список допустимых

- не пропускаем умников пытающихся загрузить file.php.rar

- отключаем выполнение php в папке загрузок ( http://habrahabr.ru/post/61842/ )

- отключаем выполнение htaccess в папке загрузок (это можно сделать только в конфиге веб-сервера директивой http://httpd.apache.org/docs/current/mod/core.html#allowoverride )

- запрещаем загрузку htaccess файлов

- загружаем файлы на отдельный сервер где не установлен php, а есть только nginx который не выполняет ни php код ни читает htaccess (так вроде делает вконтакте)

Теперь подумаем какие файлы несут нам угрозу:

- php файлы: запустив их злоумышленник выполняет любой код на сервере и полностью его контролирует
- htaccess файлы: злоумышленник может менять настройки сервера и делать что хочет
- html файлы: так как эти файлы находятся на одном домене с твоим сайтом то JS код в них может делать любые действия от имени пользователя, обходя в том числе CSRF защиту (он сможет прочитать CSRF токен из тела страниц на твоем сайте). Злоумышленник должен загрузить HTML файл и как-то заманить пользователя его открыть. Решение: загружаем пользовательские файлы на отдельный домен. Так делает Гугл ( http://whois7.ru/?q=googleusercontent.com ) и гитхаб ( http://whois7.ru/?q=http://githubusercontent.com/ ). Либо не принимаем html.

JS файлы угрозы не несут так как JS код не выполняется на сервере.

> Запрет доступа вообще бессмысленный. Допустим, в Yii к директории protecred нельзя обратиться, так и картинка не будет отображаться в браузере, если я туда сохраню.


Верно.

> Может, переименование файла спасет?


> $filename = md5(microtime() . rand(0, 9999));


> Тут гарантируется уникальность имени?


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

> Или хакир все равно вычислит свой высер по хеш-сумме?


Может быть у тебя где-то будет выдаваться имя файла, и хакер его найдет. Это не защита.

В общем, мне кажется, надо проверять расширения. Если ты принимешь картинки то только несколько разрешенных расширений, если любые файлы то принудительно ставь им например расширение .txt и убирай остальные точки из имени. Ну и запрети выполнение php кода в папке.
#327 #451703
>>451507

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

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

>>451527

Content management System

>>451540

Раньше Юи нельзя было поставить через композер из-за запутанной структуры папок (фреймворк и пользовательский код были перемешаны) и старые туториалы использовали вариант когда ты руками скачиваешь и распаковываешь архив.

В новом Yii эта проблема решена. Те каталоги в которых ты кладешь свой код, делаются вне vendor.

Ты читал https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-installation.md ?

Там используется команда https://getcomposer.org/doc/03-cli.md#create-project и базовое приложение из https://github.com/yiisoft/yii2-app-basic

Композер склонирует этот проект в корневую папку, а зависимости (в том числе ядро Yii) в vendor.

Заметь что там уже нет папки protected: контроллеры лежат прямо в корневом каталоге.

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


По моей ссылке рассматривается композер.

> А что должен делать я в случае использования композера, создавать такую же структура, как та что в вендоре, но новую и просто подключать в неё yii2 никак не меняя содерживое вендор?



делать через create-project
#327 #451703
>>451507

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

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

>>451527

Content management System

>>451540

Раньше Юи нельзя было поставить через композер из-за запутанной структуры папок (фреймворк и пользовательский код были перемешаны) и старые туториалы использовали вариант когда ты руками скачиваешь и распаковываешь архив.

В новом Yii эта проблема решена. Те каталоги в которых ты кладешь свой код, делаются вне vendor.

Ты читал https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-installation.md ?

Там используется команда https://getcomposer.org/doc/03-cli.md#create-project и базовое приложение из https://github.com/yiisoft/yii2-app-basic

Композер склонирует этот проект в корневую папку, а зависимости (в том числе ядро Yii) в vendor.

Заметь что там уже нет папки protected: контроллеры лежат прямо в корневом каталоге.

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


По моей ссылке рассматривается композер.

> А что должен делать я в случае использования композера, создавать такую же структура, как та что в вендоре, но новую и просто подключать в неё yii2 никак не меняя содерживое вендор?



делать через create-project
#328 #451704
>>451554

Неверно. Вот в мануале описано, надо делать через create-project: https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-installation.md

>>451551

> Я просто наследовал и переопределил, но так ли надо было сделать?


Наверно можно.

>>451584

какие-то заголовки не скопировал. А вообще Moodle open source, можно в коде посмотреть если что.

Ну и POST можно минимум в 2 вариантах enctype передавать.

>>451225
>>451656

> objectFilter


Лучше просто filter, в SplObjectSTorage все равно кроме объектов ничего нет и получается масло масляное.

В остальном все верно.
#328 #451704
>>451554

Неверно. Вот в мануале описано, надо делать через create-project: https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-installation.md

>>451551

> Я просто наследовал и переопределил, но так ли надо было сделать?


Наверно можно.

>>451584

какие-то заголовки не скопировал. А вообще Moodle open source, можно в коде посмотреть если что.

Ну и POST можно минимум в 2 вариантах enctype передавать.

>>451225
>>451656

> objectFilter


Лучше просто filter, в SplObjectSTorage все равно кроме объектов ничего нет и получается масло масляное.

В остальном все верно.
#329 #451705
>>451696

Наверно потому что

> $newLeader = reset($filteredEmployees);



может вернуть false или null в пустом массиве. А когда ты дампил он был не пуст.
#330 #451707
>>451696

По коду:

> public function getLeader() {


Возвращает массив. Что за ерунда? Функция называется getLeader, а не getLeaders, верно? Значит она не должна возвращать массив.

Да и может ли быть 2 босса в департаменте? Если да то перименуй функцию и переделай весь код который ее использует на многобоссовый режим. Если нет то возвращай один объект, а если лидеров окажется больше, выкинь какое-нибудь spl-исключение.

> public $name;


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

> return $f->getLeader() == true;


Можно просто return $f->getLeader( ); он же true/false возвращает?

Ну и getLeader на рабочем правильнее назвать isLeader. Функции возвращающие true/false обычно называют isSomething()

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Department.php#L24


нужен тайп хинт

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Department.php#L69


Лучше всегда возвращать точное значение а округляет пусть тот кто выводит

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Department.php#L72


> public function makeEmployeesArray() {


Ты бы мог заморочиться и использовать http://php.net/manual/ru/function.iterator-to-array.php так как SplObjectStorage реализует интерфейс Traversable.

Ну и учитывая что это используется только в getLeader, от этой функции вообще можно было избавиться. Можно и оставить, впрочем.

> ?>


Не ставь это в конце

> throw new Exception('Incorrect rang');


Лучше писать тут же чему равен ранг. Тогда отлаживать ошибку будет проще. делай помогающие сообщения об ошибках.

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L5


> public function getEmployeesType($employees, $type, $leader = false)


Тайп хинт бы поставить

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L21


> public function findAndProcessWorkers($employees, callable $callback) {


Есть ведь https://php.net/manual/ru/function.array-walk.php ?

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L57


> //Повышаем зарплату и кофе определенному типу


Это лучше писать перед функцией, а не справа так как строки получаются длинные

> public function secondAnticrisisMethod(


Тут надо сделать проверки вроде: если подходящего кандидата нет, не меняем лидера

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

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

> firstAnticrisisMethod('engineer');


Название надо сделать константой вроде Employee::JOB_ENGINEER. А то у тебя какие-то мутные строки, легко опечататься, непонятно каке вообще профессии существуют.
#330 #451707
>>451696

По коду:

> public function getLeader() {


Возвращает массив. Что за ерунда? Функция называется getLeader, а не getLeaders, верно? Значит она не должна возвращать массив.

Да и может ли быть 2 босса в департаменте? Если да то перименуй функцию и переделай весь код который ее использует на многобоссовый режим. Если нет то возвращай один объект, а если лидеров окажется больше, выкинь какое-нибудь spl-исключение.

> public $name;


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

> return $f->getLeader() == true;


Можно просто return $f->getLeader( ); он же true/false возвращает?

Ну и getLeader на рабочем правильнее назвать isLeader. Функции возвращающие true/false обычно называют isSomething()

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Department.php#L24


нужен тайп хинт

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Department.php#L69


Лучше всегда возвращать точное значение а округляет пусть тот кто выводит

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Department.php#L72


> public function makeEmployeesArray() {


Ты бы мог заморочиться и использовать http://php.net/manual/ru/function.iterator-to-array.php так как SplObjectStorage реализует интерфейс Traversable.

Ну и учитывая что это используется только в getLeader, от этой функции вообще можно было избавиться. Можно и оставить, впрочем.

> ?>


Не ставь это в конце

> throw new Exception('Incorrect rang');


Лучше писать тут же чему равен ранг. Тогда отлаживать ошибку будет проще. делай помогающие сообщения об ошибках.

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L5


> public function getEmployeesType($employees, $type, $leader = false)


Тайп хинт бы поставить

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L21


> public function findAndProcessWorkers($employees, callable $callback) {


Есть ведь https://php.net/manual/ru/function.array-walk.php ?

> https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L57


> //Повышаем зарплату и кофе определенному типу


Это лучше писать перед функцией, а не справа так как строки получаются длинные

> public function secondAnticrisisMethod(


Тут надо сделать проверки вроде: если подходящего кандидата нет, не меняем лидера

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

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

> firstAnticrisisMethod('engineer');


Название надо сделать константой вроде Employee::JOB_ENGINEER. А то у тебя какие-то мутные строки, легко опечататься, непонятно каке вообще профессии существуют.
#331 #451711
>>451705

>А когда ты дампил он был не пуст.


Не понял. Как такое могло случиться? Я не правильную функцию подобрал? reset же не совсем преднозначен для получения первого элемента. Может сделать просто $newLeader = $filteredEmployees[0]?

>>451707

>Ты бы мог заморочиться и использовать http://php.net/manual/ru/function.iterator-to-array.php


Почему ты сразу не сказал что существует такая функция? Я же сразу сказал что буду писать сам такую функцию (╯︵╰,)

> public function findAndProcessWorkers($employees, callable $callback) {


>Есть ведь https://php.net/manual/ru/function.array-walk.php ?


Я у тебя скопировал ༼ つ ◕_◕ ༽つ

>(а прописать ее в классах Инженера, Менеджера и тд).


У меня нету таких классов. Есть общий класс Department, и при добавлении сотрудника указывается все через коснтруктор. Не понял, как ты имел ввиду унаследовать чтобы избежать этого? ʃ(˘▽ƪ)

> firstAnticrisisMethod('engineer');


Название надо сделать константой вроде Employee::JOB_ENGINEER. А то у тебя какие-то мутные строки, легко опечататься, непонятно каке вообще профессии существуют.
А можно пример или подсказку как это реализовать? Не совсем понял просто. Что такое константы я, вроде, знаю, но такой метод записи вижу первый раз. (◡‿◡)
#332 #451715
Что такое phpbb3, насколько сложно это?
#333 #451767
>>451697

>заглавные буквы надо делать средствами CSS


Это как? Не нашел такого свойства.

>На макете «Consectetur» написано шрифтом без засечек, у тебя с засечками.


Не знаю, я использовал шрифт Lato, а там используются какие-то различные его разновидности, Lato black, Lato light.

>Надпись «Curabitur blandit tempus portitto» не такая бледная.


Я пипеткой цвет взял из макета.
#334 #451775
Я так понял в задаче про студентов обязательно надо запомнить id человека который уже зарегестрировался, что бы потом вывести по этому id форму для редактирования. Запомнить id я так понимаю можно через куки или сессии, лучше через куки, но вот стоит ли писать id в куки, это не является угрозой для безопасности? Или их надо просто зашифровать каким-нибудь образом? Задание же не предусматривает авторизацию?
65 Кб, 559x541
#335 #451808
Пытаюсь решить задачу про кошек-мышек. Принцип такой: поле представляет собой массив [1...n^2]. Метод класса "Animal" setPosition(array closedPositions) будет гарантировать уникальность случайного выбора, чтобы не получилось, что несколько животных могут появиться на одной и той же позиции. Также в этом классе прописаны методы, которые будут находить ортогональные клетки, возможные с текущей позиции (find(Right | Left | Down | Up)Cell); есть метод, который будет исключать закрытые позиции (например: если рядом на клетке уже стоит животное того же вида) exludeClosedPositions(array sameSpeciesPositions); метод, который будет оценивать каждый из возможных шагов calcStepsPrices(array $enemiesPositions), используя вспомогательные методы findClosestEnemy(array $enemiesPositions) и calcStepPrice(). и абстрактный метод makeStep().
Класс "Mouse" будет добавлять метод расчета поля видимости 9*9 findVisibleField(), потом родительский метод calcStepsPrices(array $enemiesPositions) будет переписан так, что будет проверка пересекаются ли массивы $enemiesPositions и массив поля видимости, возвращаемый методом findVisibleField(). Если пересечение будет, то в makeStep будет выбран наиболее лучший ход (чтобы расположиться дальше от кота), если нет будет сделан случайный ход.
Класс "Cat" будет добавлять диагональные шаги и делать ход самый ближайший к мышке. Также там будет счетчик ходов и свойство, хранящее позицию мыши. Если позиция кота и мыши совпадут ($this->position === $this->enemyPosition или счетчик будет картен 8) то метод sleep() вернет true. Метод makeStep() будет изменять $this->position и вернет отрицательное значение текущей позиции если кот спит.
Ну и класс "Field", который будет хранить массив поля и строковое представление поля. Если позиция кота отрицательная, будет выведен символ "@". Есть также методы resetCatsPositions()/resetMousesPositions() которые будут учитывать обновление позиций.
Укажи, пожалуйста, где, что не так с таким решением. И еще интересует вопрос, как удалять мышей (в моем решении это будет делать метод класса "Field" removeDeadMouses())? Достаточно ли будет их убрать из массива в классе "Field" или надо придумывать что-то связанное с __destruct()?
Мне не нравится, что класс "Field" хранит в себе объекты мышей и котов, хотя в основном оперирует их позициями. Но с другой стороны, как-то нужно удалять мышей, обновлять текущие позиции. В общем, боюсь, что наделал кучу каких-то сложностей, ОП, ткни в них носом. Заранее спасибо.
65 Кб, 559x541
#335 #451808
Пытаюсь решить задачу про кошек-мышек. Принцип такой: поле представляет собой массив [1...n^2]. Метод класса "Animal" setPosition(array closedPositions) будет гарантировать уникальность случайного выбора, чтобы не получилось, что несколько животных могут появиться на одной и той же позиции. Также в этом классе прописаны методы, которые будут находить ортогональные клетки, возможные с текущей позиции (find(Right | Left | Down | Up)Cell); есть метод, который будет исключать закрытые позиции (например: если рядом на клетке уже стоит животное того же вида) exludeClosedPositions(array sameSpeciesPositions); метод, который будет оценивать каждый из возможных шагов calcStepsPrices(array $enemiesPositions), используя вспомогательные методы findClosestEnemy(array $enemiesPositions) и calcStepPrice(). и абстрактный метод makeStep().
Класс "Mouse" будет добавлять метод расчета поля видимости 9*9 findVisibleField(), потом родительский метод calcStepsPrices(array $enemiesPositions) будет переписан так, что будет проверка пересекаются ли массивы $enemiesPositions и массив поля видимости, возвращаемый методом findVisibleField(). Если пересечение будет, то в makeStep будет выбран наиболее лучший ход (чтобы расположиться дальше от кота), если нет будет сделан случайный ход.
Класс "Cat" будет добавлять диагональные шаги и делать ход самый ближайший к мышке. Также там будет счетчик ходов и свойство, хранящее позицию мыши. Если позиция кота и мыши совпадут ($this->position === $this->enemyPosition или счетчик будет картен 8) то метод sleep() вернет true. Метод makeStep() будет изменять $this->position и вернет отрицательное значение текущей позиции если кот спит.
Ну и класс "Field", который будет хранить массив поля и строковое представление поля. Если позиция кота отрицательная, будет выведен символ "@". Есть также методы resetCatsPositions()/resetMousesPositions() которые будут учитывать обновление позиций.
Укажи, пожалуйста, где, что не так с таким решением. И еще интересует вопрос, как удалять мышей (в моем решении это будет делать метод класса "Field" removeDeadMouses())? Достаточно ли будет их убрать из массива в классе "Field" или надо придумывать что-то связанное с __destruct()?
Мне не нравится, что класс "Field" хранит в себе объекты мышей и котов, хотя в основном оперирует их позициями. Но с другой стороны, как-то нужно удалять мышей, обновлять текущие позиции. В общем, боюсь, что наделал кучу каких-то сложностей, ОП, ткни в них носом. Заранее спасибо.
#336 #451847
Иногда в новостях можно услышать, что тот или иной школьник из Британии или Вьетнама написал приложение которое стало одним из самых популярных и его теперь использует например Амазон, приложение которое например помогает читателю понять стоит ли ему читать ту или иную новость, ну например вот http://www.macdigger.ru/iphone-ipod/kak-britanskij-shkolnik-prodal-yahoo-za-30-mln-prilozhenie-dlya-iphone.html. Можно ли писать подобные приложения на ПХП?
#339 #451878
Почему бы не использовать всегда POST запрос? Даже в поиске, к примеру. Какие у него минусы по сравнению с GET?
#340 #451880
>>451878
Нельзя дать ссылку с пост запросом.
#341 #451883
>>451880
В смысле? В каких ситуациях она нужна, не могу догнать.
#342 #451886
>>451883
Ну вот смотри https://www.google.ru/webhp?hl=ru&tab=ww#newwindow=1&hl=ru&q=%D0%9A%D0%BE%D1%82%D0%B8%D0%BA%D0%B8 был бы тут пост запрос - я бы не мог поделиться с тобой результатом поиска. Я уже не говорю, что с гет запросом можно всю страницу переделать в совершенно другую.
#343 #451888
>>451886
Хм, действительно. Благодарю. Но если не стоит цели делиться ссылками после запроса, то можно и не использвать ГЕТ для чистоты адресной строки?
#344 #451889
>>451888
Ну, никто не запрещает.
#345 #451890
>>451883
В урл ты пост не засунешь.
#346 #451894
>>451889
>>451890
Я почему спрашиваю: сейчас у меня поиск ГЕТом и в адресной строке вот такая хуерга "test.com/?search=слово&submit="
Мне это все не нравится, я и допустим хочу сделать красиво "test.com/слово". Если использовать ПОСТ, то этого не добиться, правильно? А как добиться этого ГЕТом?
#348 #451900
>>451896

>3 Реализация:


>3.1 IIS


>3.2 Apache


>3.3 Обработка URL в собственном скрипте


>3.4 Веб-framework


Мля, а у меня Nginx... На нем можно сделать?
#349 #451902
>>451900
http://winginx.com/ru/docs/rewrites

>Как уже знаем, в nginx не существует апачевского .htaccess, где можно было бы настроить правила для столь популярного mod_rewrite, собственно mod_rewrite — это модуль именно для Apache...



>Но не стоит расстраиваться! У nginx есть свой модуль — ngx_http_rewrite_module. По моему скромному мнению, модуль rewrite у nginx более гибок, понятен и прост в освоении, нежели mod_rewrite у Apache. Хотя, оба требуют особого понимания работы системы «ревратов» для написания правил :)

#350 #451904
>>451902
Спасибо. Выглядит сложно, придется долго курить мануалы.
#351 #451905
Если кто-то сходу знает как на index.php из этого "test.com/?search=слово&submit=" сделать это "test.com/слово", то прошу помочь. А то выглядит все реально очень плохо.
#352 #451906
>>451905
На большинстве сайтов так все и выглядит обычно. К чему такая срочность? От тебя по работе это требуют? Если чисто для себя, то почему бы не выучить реализацию ЧПУ самому?
Арканоид #353 #451907
Аноны, есть одна статья про арканоид - http://habrahabr.ru/post/116860/ где описывается создание простенького пинг-понга. Начав ковырять код этой игрушки, наткнулся на один баг(?) - если мячик подлетает к ракетке игрока сверху/снизу, он проходит сквозь нее, а не отскакивает, как положено. Функция collision() срабатывает (я тестил), и, кажется, я догадываюсь в чем глюк, но все равно не знаю, как правильно нужно переопределять координаты мяча, если он подлетает снизу или сверху ракетки. Я знаю, что многим тут влом будет вникать, но все же оставлю измененный код (увеличил только длину ракетки для наглядности), где этот баг виден.

http://jsfiddle.net/a3TfX/432/
#354 #451908
>>451906
Нет, не работа, все для себя. Но учить что-то сильно специфическое и сложное, что больше никогда не пригодиться, не очень хочется. Просто я не программер, но сайт свой имею/делаю
#355 #451920
>>451907
Вопрос снимается, я решил.
#356 #451946
>>451711

> Не понял. Как такое могло случиться? Я не правильную функцию подобрал? reset же не совсем преднозначен для получения первого элемента


Если массив пустой как тебе поможет reset? Использовать [0] конечно лучше если в массиве ключи идут по порядку.

> Не понял, как ты имел ввиду унаследовать чтобы избежать этого?



$manager = new Manager($rank);
$engineer = new Engineer($rank);

> А можно пример или подсказку как это реализовать?


http://php.net/manual/ru/language.oop5.constants.php

Я советую весь раздел мануала по ООП прочитать, ты уже не совсем начинающий.

>>451767

> Не нашел такого свойства.


text-transform

> а там используются какие-то различные его разновидности, Lato black, Lato light.


дело не в этом. Посмотри инспектором в браузере верстку или посмотри что пишет валидатор.

> Я пипеткой цвет взял из макета.


есть такое понятие как анлиалисасинг ( https://ru.wikipedia.org/wiki/%D0%A1%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 )

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

Обычно цвет можно взять из свойств текста в фотошопе, но тут шрифт тонкий и он кажется из-за этого бледнее. лучше всего подобрать цвет на глаз, там всего 256 градаций серого.
#356 #451946
>>451711

> Не понял. Как такое могло случиться? Я не правильную функцию подобрал? reset же не совсем преднозначен для получения первого элемента


Если массив пустой как тебе поможет reset? Использовать [0] конечно лучше если в массиве ключи идут по порядку.

> Не понял, как ты имел ввиду унаследовать чтобы избежать этого?



$manager = new Manager($rank);
$engineer = new Engineer($rank);

> А можно пример или подсказку как это реализовать?


http://php.net/manual/ru/language.oop5.constants.php

Я советую весь раздел мануала по ООП прочитать, ты уже не совсем начинающий.

>>451767

> Не нашел такого свойства.


text-transform

> а там используются какие-то различные его разновидности, Lato black, Lato light.


дело не в этом. Посмотри инспектором в браузере верстку или посмотри что пишет валидатор.

> Я пипеткой цвет взял из макета.


есть такое понятие как анлиалисасинг ( https://ru.wikipedia.org/wiki/%D0%A1%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 )

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

Обычно цвет можно взять из свойств текста в фотошопе, но тут шрифт тонкий и он кажется из-за этого бледнее. лучше всего подобрать цвет на глаз, там всего 256 градаций серого.
#357 #451947
>>451847

Под айфон пишут на Obj-C или Swift. Также надо иметь Мак (или хакинтош). Так что нет.
#358 #451949
>>451947
еще надо иметь учетку разработчика в аппсторе чтоб загрузить туда свое поделие. стоит 100 баксов в год кажется
#359 #451950
>>451878

В чем смысл использовать пост? Все используют гет, а ты особенный? Просто традиционно гет испльзуется для запросов не изменяющих состояние сервера и я не вижу причины делать наоборот. Ну и ссылкой можно поделиться или сохранить в закладки, что удобно. Также можно вернуться на страницу результатов кнопкой назад. Я не понимаю почему ты хочешь лишить пользователей удобства.
#360 #451951
>>451950
Я там написал чуть позже, зачем мне это - оказалось, что необходимая мне фича называется ЧПУ.
#361 #451953
>>451894

> Мне это все не нравится, я и допустим хочу сделать красиво "test.com/слово"


Это можно сделать, редиректом например но это довлоьно бессымсленная затея. Во-первых, что если пользователь введет кроме слова еще какие-нибудь символы. Что если он введет index.php? По моему это бессмысленное усложнение которое не дает никакой выгоды.

Да и в современных браузерах часто query string параметры вообще не выводятся пока не щелкнешь по адресной строке.
#362 #451954
проясните за безопасность какими функциями надо прогонять все что пишется в базу?
#363 #451955
>>451908

Ты занимаешься ерундой. Другие сайты ведь так не делают.
#364 #451956
>>451953
Ну молодец, ты пояснил всему миру, что им не нужны ЧПУ. Выходи с плакатами на улицу, чо уж там.
11 Кб, 259x96
#365 #451958
>>451955

>Другие сайты ведь так не делают.


Заебись, спасибо.
#366 #451959
>>451954

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

http://php.net/manual/ru/pdo.prepared-statements.php
http://habrahabr.ru/post/137664/
#367 #451961
>>451958

Красивые URL лучше сделать для обычных страниц а не для результатов поиска. В моем понимании красивые URL это соответствующие концепциям HTTP/REST, и эти концепции не требуют результаты поиска делать отдельными страницами.

Вот например статья для начала:

http://www.artlebedev.ru/kovodstvo/sections/48/
https://ru.wikipedia.org/wiki/%D0%A7%D0%9F%D0%A3_(%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82)#.D0.9A.D0.BE.D0.BD.D1.86.D0.B5.D0.BF.D1.86.D0.B8.D1.8F_.D0.A7.D0.9F.D0.A3

Никакая форма не будет отправлять данные приписывая их к URL. ты должен либо делать это яваскриптом либо принимать запрос и редиректить.

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

Ну и я вспомнил — некоторые сайты так делали, но они делали это ради того чтобы создать видимость что у них много страниц и занять более высокое место в поисковиках. Не уверен что этот трюк работает в наши дни.
#368 #451963
>>451958

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

http://yandex.ru/yandsearch?lr=2&text=test
#369 #451964
>>451961
>>451963
Хорошо, я верю, что вы правы. Но тогда все равно я вижу проблему:
test.com/?search=слово&submit=
не выглядит так же красиво, как
http://yandex.ru/yandsearch?text=слово

Как привести ссылку к нормальному виду без сабмита хотя бы?
#370 #451967
>>451964
Что еще за сабмит? Зачем он тебе?
#371 #451969
>>451967

>test.com/?search=слово&submit=


Вот этот в конце.
#372 #451970
>>451969
Я понял что оно в конце, я спрашиваю зачем оно там и какое у него значение?
#373 #451972
>>451970
Я почему-то думаю, что это кнопка дописывает, так как именно она у меня имеет соответствующие атрибуты. Но я не знаю, как сделать кнопку по-другому.
<button class="..." type="submit" name="submit">
#374 #451973
>>451970
А, еще и в пхп тоже принимаю
if (isset($_GET['submit'])) {
}
#375 #451975
>>451970
Может быть дело в бутстрапе? Я использую вот этот компонент с похожим синтаксисом:
http://getbootstrap.com/components/#input-groups-buttons
Хотя в обычной форме без бустрапа я бы поставил
<input type="submit" name="submit" value="Поиск">
#376 #451976
>>451959
а это от всего спасает? например от записи в базу джаваскрипта?
#377 #451981
Так, я понял, откуда у меня добавляется в URL &submit=. Все дело в атрибуте кнопки name="submit". Но проблема в том, что если убрать этот аттрибут, то кнопка перестает работать. Короче, какие-то очередные тонкости использования форм, о которых не пишут в обычных мануалах.
Но вопрос остается открытым, буду им бампать пока не поможете, лол) Я же знаю, вы догадываетесь, в чем проблема.
#378 #451987
>>451981
Кнопку сабмит просто переделать на POST вместо GET и все.
#379 #451988
>>451987
И поставить вместо

>if (isset($_GET['submit'])) {



if (isset($_POST['submit'])) {
26 Кб, 362x362
#380 #451989
>>451987
>>451988
Вау! А выше мне говорили совершенно другое, хотя я начал свои рассуждения именно с POSTа:

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


Как насчет определиться, ребят?
#381 #451990
Ребятки, очень прошу помощи.

Как выглядит переменная сессии в Wordpress?

залетный-ньюфаг-хеллоуворлдщик
#382 #451995
>>451989
Не слушай меня, я херню несу. У тебя кроме сабмита там должно еще поле быть. Нужно делать isset на него, а не на сабмит, тогда и атрибут можно будет убрать.
Допустим у меня в форме:
<input type="text" name="search" value='значение'>

<input type="submit" value="Поиск">

А в коде у меня проверка
if (isset($_GET['search']) а не по сабмиту
#383 #451998
>>451990
удваиваю реквест
#384 #452000
>>451995
Сработало. Я тоже думал о таком варианте раньше, но с точки зрения нормального программирования listner на текстовом поле должен срабатывать каждый раз, когда ты вводишь или удаляешь один символ. А здесь разве не так? Разве не после каждого введенного символа срабатывает все, что находится

if (isset($_GET['submit'])) {
тут
}

?
#385 #452002
>>452000
Ничего не срабатывает пока ты не отправляешь форму. Пхп скрипт выполняется один раз, при заходе на страницу, потом только когда ты её обновишь. Когда жмешь сабмит, заголовки вместе с тем, что ты написал в поле отправляются на сервер и обрабатываются им и он отправляет уже новый хтмл код.
#386 #452003
>>452002
Спасибо! А если мне нужен будет нормальная интерактивность (но не в этом случае), то тогда джаваскрипт и аякс, правильно я понимаю?
#387 #452004
>>452003
Да, ты правильно понимаешь.
#388 #452005
>>451990
жамп
#389 #452016
>>451976

Это спасает только от SQL инъекции то есть подмены запроса на выгодный злоумышленнику. Можешь почитать про нее тут

https://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

https://forum.antichat.ru/thread43966.html

От других уязвимостей это не защищает. Вывод на страницу яваскрипта - это XSS и от нее надо защищаться по другому, на этапе вывода данных а не при вставке в базу. У меня есть урок по XSS

https://github.com/codedokode/pasta/blob/master/security/xss.md

> например от записи в базу джаваскрипта?


базе от жаваскрипта ни жарко ни холодно.

>>451989

Это тебе говорит анон не знающий различия GET и POST. А я знаю и советую GET для поиска.

http://handynotes.ru/2009/08/get-versus-pos.html

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

http://stackoverflow.com/questions/46585/when-do-you-use-post-and-when-do-you-use-get

>>451981

Попробуй тогда button заменить на input type=submit. Но по моему ты не туда свои усилия направляешь.
#389 #452016
>>451976

Это спасает только от SQL инъекции то есть подмены запроса на выгодный злоумышленнику. Можешь почитать про нее тут

https://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

https://forum.antichat.ru/thread43966.html

От других уязвимостей это не защищает. Вывод на страницу яваскрипта - это XSS и от нее надо защищаться по другому, на этапе вывода данных а не при вставке в базу. У меня есть урок по XSS

https://github.com/codedokode/pasta/blob/master/security/xss.md

> например от записи в базу джаваскрипта?


базе от жаваскрипта ни жарко ни холодно.

>>451989

Это тебе говорит анон не знающий различия GET и POST. А я знаю и советую GET для поиска.

http://handynotes.ru/2009/08/get-versus-pos.html

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

http://stackoverflow.com/questions/46585/when-do-you-use-post-and-when-do-you-use-get

>>451981

Попробуй тогда button заменить на input type=submit. Но по моему ты не туда свои усилия направляешь.
#390 #452017
>>451990

погуглил бы лентяша. Вордпресс не использует сессии: https://wordpress.org/support/topic/how-does-wordpress-handle-sessions-and-session-variables
#391 #452021
>>452017
Благодарю, твоя матушка - великая женщина, а сам ты молодец.
#392 #452025
Сделал генерацию превьюшек. Пока без кропа, только скейл.
Какие замечания на этом этапе, кроме того, что кроп не работает?
https://gist.github.com/uniunicorn/cfbbdf4eb82953be2672
#393 #452041
>>451703

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


>Я бы рассчитывал на полгода-год вдумчивого ста



Так нужно будет перед этим html/css учить или нет?
#394 #452043
>>452041

Ты можешь сделать сайт без знания html/css?
#395 #452047
>>452016

>базе от жаваскрипта ни жарко ни холодно.


ну понятно, я имел ввиду от последующего вывода его ИЗ базы на страницу.
#396 #452052
Почему у меня такой цикл не срабатывает?

<?php for($i= 0; $i < count($results); ++$i): ?>
<?= htmlspecialchars($results, ENT_QUOTES) ?>
<?php endfor; ?>

Ни одной итерации не проходит. Хотя если вместо цикла поставить <?= htmlspecialchars($results[0], ENT_QUOTES) ?>, то выводит результат просто замечательно, как и <?= htmlspecialchars(count($results)) ?> показывает ненулевое число. Я в замешательстве.

и да, я знаю, что есть foreach, но конкретно здесь мне нужен обычный for
#397 #452053
>>452052
Неправильно скопировал сюда, вот правильный вариант:

<?php for($i= 0; $i < count($results); ++$i): ?>
<?= htmlspecialchars($results, ENT_QUOTES) ?>
<?php endfor; ?>
8 Кб, 567x179
#398 #452056
>>452053
Да ебаный в рот. Это макака вырезает, а не я неправильно скопировал. Там в теле цикла у переменной results естественно стоят квадратные скобки с переменной "i" внутри. Почему-то здесь они просто вырезаются.

<?php for($i= 0; $i < count($results); ++$i): ?>
<?= htmlspecialchars($results, ENT_QUOTES) ?>
<?php endfor; ?>

Вот скрин.
#399 #452071
>>452056
исправь $results на $results[$i]
#400 #452072
>>452071
и еще: count(...) не стоит вызывать на каждой итерации. до цикла запили что-то типа $length = count($results)
#401 #452073
>>452071
Вот это я долбоеб. Спасибо, няша! Я чуть головой не тронулся, пока думал в чем может быть проблема. Мда...
#402 #452074
>>452073
Не за что. Алсо, для перебора массивов лучше юзать foreach ($array as $key) { ... и тут работаешь с $key, который аналогичен $array[$i] }
#403 #452077
>>452074
Да, я писал чуть выше

>и да, я знаю, что есть foreach, но конкретно здесь мне нужен обычный for



Мне просто все равно нужен итератор, и чтобы не объявлять его отдельно, мне проще сделать обычный цикл.
#404 #452080
>>452077
а, ну тогда да норм.
сколько пыхой занимаешься? у меня аналогичная ошибка была полгода назад просто (с $ в скобках), заебался читать про ООП, впервые зашел в этот тред вообще
тут совсем начинающие или как?
#405 #452085
>>452080
Пару дней уже занимаюсь. Я просто раньше с джавой и сишкой работал, вот и невнимательно написал в скобках. Но вообще такие ошибки должны выдавать хоть какие-нибудь warning'и, а у меня все ок на вид было.
#406 #452086
>>452080
еще один заебавшийся в ооп на связи. ты по чем конкретно угорел?
#407 #452091
>>452086
Мэтт Зандстра - PHP, Объекты, шаблоны и методики программирования

На самом деле книжка очень ок, но голова спустя полгода говнокодерства в процедурном стиле крайне тяжко воспринимает ООП. Хотя всю теории по классам уже знаю.

Хочу вот дочитать её, и перекатиться в какой-нибудь фреймворк с MVC парадигмой.

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

Мечты...
#408 #452098
>>452085

> Но вообще такие ошибки должны выдавать хоть какие-нибудь warning'и, а у меня все ок на вид было.


Они выдают, просто ты их зачем-то отключил (или не включил).

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

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

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

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

>Если массив пустой как тебе поможет reset?


Но он не пустой! Я распринтовал его как раз после reset.

>$manager = new Manager($rank);


>$engineer = new Engineer($rank);


Охохохоххо, ну ладно сделаю с наследованием.
#410 #452118
>>451715

google it https://ru.wikipedia.org/wiki/PhpBB

>>451775

> лучше через куки, но вот стоит ли писать id в куки, это не является угрозой для безопасности?


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

https://github.com/codedokode/pasta/blob/master/student-list.md

>>451808

На мой взгляд схема усложненная, с лишними полями и методами.

> поле представляет собой массив [1...n^2]


Вообще необязательно делать массив.

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


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

Непонятно почему fieldSize является свойством животного. Это как? Бывают кошки с fieldSize = 10, а бывают с 12?

pricesOfSetp и possibleSteps по моему нет смысла делать полями в классе. Зачем? Они на следующем ходе становятся неактуальными, зачем их хранить?

Не очень понятно зачем массив catsPositions если координаты кошек и так хранятся в каждой кошке. Зачем дублировать?

Соответственно непонятно зачем методы работы с этими координатами.

Метод setPosition можно убрать. Координаты животного можно генерировать извне.

Мне кажется вместо 2 методов addCat/Mouse лучше сделать один а то добавив еще 10 видов животных мы устанем добавлять методы.

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

> что будет проверка пересекаются ли массивы $enemiesPositions и массив поля видимости, возвращаемый методом findVisibleField()


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

> Достаточно ли будет их убрать из массива в классе "Field" или надо придумывать что-то связанное с __destruct()?


Достаточно убрать.

> Мне не нравится, что класс "Field" хранит в себе объекты мышей и котов


Почему? Животные находятся на Карте. Значит Карта должна знать кто на ней находится.
#410 #452118
>>451715

google it https://ru.wikipedia.org/wiki/PhpBB

>>451775

> лучше через куки, но вот стоит ли писать id в куки, это не является угрозой для безопасности?


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

https://github.com/codedokode/pasta/blob/master/student-list.md

>>451808

На мой взгляд схема усложненная, с лишними полями и методами.

> поле представляет собой массив [1...n^2]


Вообще необязательно делать массив.

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


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

Непонятно почему fieldSize является свойством животного. Это как? Бывают кошки с fieldSize = 10, а бывают с 12?

pricesOfSetp и possibleSteps по моему нет смысла делать полями в классе. Зачем? Они на следующем ходе становятся неактуальными, зачем их хранить?

Не очень понятно зачем массив catsPositions если координаты кошек и так хранятся в каждой кошке. Зачем дублировать?

Соответственно непонятно зачем методы работы с этими координатами.

Метод setPosition можно убрать. Координаты животного можно генерировать извне.

Мне кажется вместо 2 методов addCat/Mouse лучше сделать один а то добавив еще 10 видов животных мы устанем добавлять методы.

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

> что будет проверка пересекаются ли массивы $enemiesPositions и массив поля видимости, возвращаемый методом findVisibleField()


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

> Достаточно ли будет их убрать из массива в классе "Field" или надо придумывать что-то связанное с __destruct()?


Достаточно убрать.

> Мне не нравится, что класс "Field" хранит в себе объекты мышей и котов


Почему? Животные находятся на Карте. Значит Карта должна знать кто на ней находится.
#411 #452120
>>451808

также я не уверен нужно ли в Кошке хранить enemyPosition? Кошка всегда гоняется только за одной мышью или каждый ход выбирает ближайшую? Если второе то зачем хранить это свойство?

>>451849

> http://jsfiddle.net/wa76jL0L/



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

> NY & SF


& это спецсимвол и его надо вcтавлять как &amp; . Аналогично с символами < и >. Это написано в примечаниях к задаче, кстати.

> <span id="heart">


Из тегов можно использовать только em по условию.

> http://jsfiddle.net/23cgbqnk/1/



> <div id="text1">


Это плохая идея так как чтобы добавить еще 2 блока мы должны написать еще 2 правила CSS.

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

> width: 98%;


> margin: 1%;


Одно из значений можно не указывать, width напрмиер

> margin-top: 10px;


> margin-bottom: 10px;


Вместо того чтобы ставить margin на каждом желтом блоке проще поставить padding на синем.

> http://jsfiddle.net/vtfL4dfx/


Ок, тут все верно.
#411 #452120
>>451808

также я не уверен нужно ли в Кошке хранить enemyPosition? Кошка всегда гоняется только за одной мышью или каждый ход выбирает ближайшую? Если второе то зачем хранить это свойство?

>>451849

> http://jsfiddle.net/wa76jL0L/



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

> NY & SF


& это спецсимвол и его надо вcтавлять как &amp; . Аналогично с символами < и >. Это написано в примечаниях к задаче, кстати.

> <span id="heart">


Из тегов можно использовать только em по условию.

> http://jsfiddle.net/23cgbqnk/1/



> <div id="text1">


Это плохая идея так как чтобы добавить еще 2 блока мы должны написать еще 2 правила CSS.

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

> width: 98%;


> margin: 1%;


Одно из значений можно не указывать, width напрмиер

> margin-top: 10px;


> margin-bottom: 10px;


Вместо того чтобы ставить margin на каждом желтом блоке проще поставить padding на синем.

> http://jsfiddle.net/vtfL4dfx/


Ок, тут все верно.
#412 #452122
>>451900

Лучше делать роутинг на стороне php и не беспокоиться по поводу сервера.

>>451907

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

Я могу посоветовать воспользоваться отладчиком яваскрипта, который позволяет тебе остановить программу в любом месте, просмотреть и даже поменять знаечние любой переменной. Он встроен и в хром, и в Фаерфокс: http://habrahabr.ru/post/143767/
#413 #452126
>>451956

Яндекс не приукрашает адрес страницы поиска, Гугл не приукрашает. При этом например обычные страницы и разделы у них с ЧПУ.

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

>>451907

Код кстати очень убогий: если игра не идет, он все равно ест под 40% CPU у меня. Надо не перерисовывать весь холст, а только изменившиеся части.

>>452000

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

>>452025

> const THUMBS_URL = "http://site.local/thumbnailier/thumbs/";


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

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

> public static function link($imgSourcePath, $width, $height, $mode)


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

ну и у тебя есть 10 раз вызвать link() то 10 раз сгенерируется превьюшка даже если она давно уже есть на диске. Это неэффективно.

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

> https://gist.github.com/uniunicorn/cfbbdf4eb82953be2672#file-crop-scale-php-L41


Непонятно почему надо делать imagecopyresampled 2 раза подряд?

> $im = imagecreatefromjpeg($imgSourcePath);


Картинки могут быть еще в PNG или GIF.

> switch ($width_source > $height_source) {


> case true:


Это заменяется на if/else

> list($width_source, $height_source) = getimagesize($imgSourcePath);


getimagesize может вернуть false вместо массива, посмотри мануал.
#413 #452126
>>451956

Яндекс не приукрашает адрес страницы поиска, Гугл не приукрашает. При этом например обычные страницы и разделы у них с ЧПУ.

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

>>451907

Код кстати очень убогий: если игра не идет, он все равно ест под 40% CPU у меня. Надо не перерисовывать весь холст, а только изменившиеся части.

>>452000

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

>>452025

> const THUMBS_URL = "http://site.local/thumbnailier/thumbs/";


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

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

> public static function link($imgSourcePath, $width, $height, $mode)


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

ну и у тебя есть 10 раз вызвать link() то 10 раз сгенерируется превьюшка даже если она давно уже есть на диске. Это неэффективно.

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

> https://gist.github.com/uniunicorn/cfbbdf4eb82953be2672#file-crop-scale-php-L41


Непонятно почему надо делать imagecopyresampled 2 раза подряд?

> $im = imagecreatefromjpeg($imgSourcePath);


Картинки могут быть еще в PNG или GIF.

> switch ($width_source > $height_source) {


> case true:


Это заменяется на if/else

> list($width_source, $height_source) = getimagesize($imgSourcePath);


getimagesize может вернуть false вместо массива, посмотри мануал.
#414 #452128
>>452047

Это называется уязвимость XSS и я дал ссылку в предыдущем посте на урок по борьбе с ней: https://github.com/codedokode/pasta/blob/master/security/xss.md

Экранировать спецсимволы HTML надо при выводе данных, а не при вставке в базу.

>>452109

Вообще наследование не принципиально, хочешь - сделай, не хочешь — не делай.

> Но он не пустой! Я распринтовал его как раз после reset.


Видимо он все же был пустой или содержал не объект.

Если ты считаешь что это не так, напиши как повторить баг? что запустить?
facemash Kira #415 #452133
Аноны, может баловался кто написанием facemash'a на пыхе?(Сайта, где надо выбрать лучшую фотку тянки их 2-ух, как в том фильме про цункенберга)Охота посмотреть на исходники и попробовать нечто подобное, дабы стать популярным в своем мухосранске
#416 #452137
>>452133

И как тян-участиницы относятся к таким сайтам? Прояви оригинальность хотя бы немного, сделай сайт с кунами.
#417 #452141
Расскажите, пожалуйста, про кеширование на пхп. Какие инструменты для него сейчас используются, а какие устарели?
#418 #452143
>>452141

Кеширование чего?
#419 #452145
>>452128

>Если ты считаешь что это не так, напиши как повторить баг? что запустить?


Открыть index.php
Ошибка происходит здесь: https://github.com/someApprentice/Vector-Com/blob/master/Classes/Direction.php#L80

Можешь сам закоментировать её и прямо перед этой строкой распринтовать $newLeader.
Аноним #420 #452146
>>452137
будут мне писать в лс и просить накрутить рейтинга предлагая взаменпотрогать мою бибу
#421 #452149
>>452145

> Strict standards: Only variables should be passed by reference in some-app-vector\Classes\Direction.php on line 66



У тебя это выводится? Это явно ошибка. если не выводится то значит ты зачем-то игнорируешь часть ошибок.

Также я написал в 79-й строке

> var_dump($filteredEmployees, $newLeader);



И он вывел

array (size=0)
empty
boolean false

ты сказал что массив не пустой. Но я вижу ровно противоположную картину.
#422 #452150
>>452149

Хотя насчет Strict Standarts это может быть из-за версии php 5.4
#423 #452153
>>452149
Но я же принтовал его самостоятельно (через print_r($newLeader) только) и он у меня выдал >>451696

>Employee Object ( [name:Employee:private] => analyst [rang:Employee:private] => 2 [salary:Employee:private] => 1100 [coffee:Employee:private] => 75 [document:Employee:private] => 5 [leader:Employee:private] => )


Зачем мне тебя обманывать? Я сам хочу понять что я не правильно сделал.

>У тебя это выводится? Это явно ошибка. если не выводится то значит ты зачем-то игнорируешь часть ошибок.


Ну я вообще ничего не менял в настройках php, вроде. Значит так по стандарту стоит.
#424 #452154
>>452153

Поставь var_dump($filteredEmployees, $newLeader); в 79 строке

Я не говорю что ты обманываешься, а что-то перепутал просто. Может код в git не выгрузил или не там вардамп поставил.
#425 #452155
Дайте ссылку где можно посмотреть примеры реализации классов с наследованием (что-то вроде класс "Животные" управляет классами "Птицы", "Насекомые" и "Млекопетающие", а последний управляет классами "Животнородящие" и "Другие"). Нужен конкретный пример на такие вложенные классы.
#426 #452156
>>452155
Пример именно на PHP.
#427 #452157
ОП, я очень тебя прошу, ответь на этот мой реквест >>452155 ссылкой, а то я сегодня не усну.
someApprentice #428 #452158
И еще, ты мне в одном из тредов советовал способ который загружает классы. Не мог бы ты мне напомнить с помощью чего он делается? А то я делаю классы специальностей с наследованием в том же файле, и при создании нового объекта у меня выдается ошибка о том что не может найти такой класс. Уверен, это из-за моего кривого автолоуда: https://github.com/someApprentice/Vector-Com/blob/master/autoload.php
someApprentice #429 #452160
>>452155
А что такого сложного?

class Animals {
public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

Class Birds extends Animals {
public function fly() {
//fly far away
}

...
}

У класс Птиц получит(унаследует) все методы и свойства класса животных. Если мы захотим что-то унаследовать от Птиц (т.е. Class Something exnteds Birds) то новый класс(Something), скорее всего, унаследует все методы и параметры от Животных и Птиц. Пишу "скорее всего", потому что не уверен что это так, но ты можешь проверить это самостоятельно, но по идее должно быть так.
#430 #452164
>>452160
Ну вот поэтому мне и нужен конкретный пример реализации. Лично меня больше всего интересуют не методы, а переменные и как с ними обращаться. Например, могу ли я из созданного объекта класса Животные обратиться к переменной Крылья (хочу узнать, есть ли у конкретного животного крылья)? Также мне не очень понятно, как обращаться с этим всем в связи с БД.
#431 #452166
>>452158

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

>>452157

Нет у меня ссылки. Вот анон неплохой пример написал: >>452160
#432 #452167
>>452164

Если поле не помечено private то можешь. Если private то нет.
#434 #452169
>>452160

> Пишу "скорее всего", потому что не уверен что это так,


Это так.
#435 #452170
>>452168
С самой БД проблем нет, я вытаскиваю информацию через мапперы и единичные классы. Но теперь мне кажется, что в моем случае нужно сделать несколько управляющих классов, а я не очень догоняю, каким образом эти управляющие классы должны заполнятся из БД.
#436 #452172
>>452170

Опиши проблему подробнее.
#437 #452173
>>452164
Про твой вопрос с БД, я, к сожалению, ничего не могу подсказать, но с первым вопросом постараюсь помочь.

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

class Animals {
public $legs = true;
public $wings = false;

public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

сlass Birds extends Animals {
public $wings = true;

public function fly() {
//fly far away
}

...
}

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


>хочу узнать, есть ли у конкретного животного крылья


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

$birds = new Birds();

print_r($birds->wings); //true

У ОПа есть уроки которые помогут тебе понять что такое ООП и как его готовить. Мне лично помогло очень сильно.
http://archive-ipq-co.narod.ru/l1/pasta.html
#437 #452173
>>452164
Про твой вопрос с БД, я, к сожалению, ничего не могу подсказать, но с первым вопросом постараюсь помочь.

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

class Animals {
public $legs = true;
public $wings = false;

public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

сlass Birds extends Animals {
public $wings = true;

public function fly() {
//fly far away
}

...
}

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


>хочу узнать, есть ли у конкретного животного крылья


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

$birds = new Birds();

print_r($birds->wings); //true

У ОПа есть уроки которые помогут тебе понять что такое ООП и как его готовить. Мне лично помогло очень сильно.
http://archive-ipq-co.narod.ru/l1/pasta.html
#438 #452174
>>452173

Предок ничего не должен знать про потомков. Нельзя из базового класса (Животное) обращаться к свойствам или методам определенным в наследниках и неизвестных базовому классу.
#439 #452175
>>452173

Но если wings определен в Animal то конечно к нему обращаться можно.
#440 #452176
>>452173
Вот тут не понятно, что делает переменная крылья в животных, хотя она должна быть только в классе птиц:
class Animals {
public $wings = false;
...

Если на первом пункте еще возникали сомнения, то вот тут $birds = new Birds(); print_r($birds->wings); уже на сто процентов стает ясно, что управляющие классы нахуй не нужны, если мы все равно будем работать с отдельными из них. Тогда возникает следующий вопрос, а зачем тогда работать с Птицами, если можно опуститься еще ниже и работать с самими Крыльями?

>>452174
>>452175
Вот это лол.
#441 #452177
>>452173

>У ОПа есть уроки которые помогут тебе понять что такое ООП и как его готовить.


Я просмотрел и как раз описаное там я знаю.
#442 #452178
>>452176

>уже на сто процентов стает ясно, что управляющие классы нахуй не нужны


Нужны, если мы не хотим по 100 раз писать один и тот же код. Например, обрати внимание что я в Классе птиц не писал параметр $legs, потому что он уже унаследовался от класса Животных.

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


Это от целей твоей задачи зависит с чем тебе работать лучше.
#443 #452179
>>452172
Сейчас у меня все работает с множеством классов, которые никак не связаны. В один момент времени идет обращение к одной таблице, через некоторое время подтягиваяется информация из другой и т.п. Это все очень неудобно, и у меня возникает такое чувство, что это неправильно. Поэтому возможно стоит создать один управляющий класс "Животные" и один большой запрос с сотнями строк в результатах, который сразу же распарсить по переменным в под-классах, чтобы потом обращаться к одному из объектов большого массива Животных. Как-то так. Более конкретно тяжело что-то сказать, ведь я спрашиваю про саму идею (ну и реализацию тоже, да)...

>>452178

>Например, обрати внимание что я в Классе птиц не писал параметр $legs, потому что он уже унаследовался от класса Животных.


Но почему тогда переменная $wings не наследуется и ее нужно снова объявлять в классе Птиц?

>Это от целей твоей задачи зависит с чем тебе работать лучше.


На сколько смог, попытался объяснить в начале этого поста, что мне нужно.
someApprentice #444 #452180
>>452177
Тогда сделай задачку про компанию "Вектор" в самом конце. Там как раз нужно использовать наследование. Если ты все знаешь ты её быстро сделаешь. Плюс тут тебе подскажут о твоих ошибках, и ты в дальнейшем сможешь их избежать.
#445 #452181
>>452179

>Но почему тогда переменная $wings не наследуется и ее нужно снова объявлять в классе Птиц?


Она тоже наследуется. Просто в Животных по стандарту она дает ложное значение, а в Птицах мы меняем его на истинное.
#446 #452183
>>452179

Если у тебя много таблиц со связями то может лучше не писать свою реализацию ORM а исплоьзовать готовую вроде Doctrine 2.

> Поэтому возможно стоит создать один управляющий класс "Животные" и один большой запрос с сотнями строк в результатах, который сразу же распарсить по переменным в под-классах



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

ну и подробности конечно из тебя как из партизана на допросе приходится выпытывать.
#447 #452185
>>452181
Получается, что если объявить эту переменную в самом верхнем классе с дефолтным значением, то мы сможем к ней обращаться и получим правильное значение, если в нижнем классе точно укажем ее значение?

>>452183
Да, таблиц сейчас десяток. Я, наверное, так и сделаю - почитаю про Doctrine и попробую реализовать.

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

class Post {
public $mainText;
...
}

сlass Comments extends Post {
public $commentsNumber;
public $commentText; //массив
public $commentLikes; //массив
...
}
#448 #452186
>>452185

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



class Animals {
public $legs = true;
public $wings = false;

public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

сlass Birds extends Animals {
public $wings = true;

public function fly() {
//fly far away
}

...
}class Animals {
public $legs = true;
public $wings = false;

public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

сlass Birds extends Animals {
public $wings = true;

public function fly() {
//fly far away
}

...
}

$birds = new Birds();

print_r($birds->legs); //false
#448 #452186
>>452185

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



class Animals {
public $legs = true;
public $wings = false;

public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

сlass Birds extends Animals {
public $wings = true;

public function fly() {
//fly far away
}

...
}class Animals {
public $legs = true;
public $wings = false;

public function eat() {
//eat something
}

public function sleep() {
//sleep sometimes
}

...
}

сlass Birds extends Animals {
public $wings = true;

public function fly() {
//fly far away
}

...
}

$birds = new Birds();

print_r($birds->legs); //false
someApprentice #449 #452188

>print_r($birds->legs); //true


Ой, нечаянно не то написал. Извиняюсь.
#450 #452189
>>452188
Но мы ведь обращаемся в нижнему классу, но при этом не знаем - птица это или нет. Нам нужно узнать, есть ли у животного крылья, а не у птицы.
#451 #452190
Кажется, я понял, почему я не понимаю сути. Я смотрю на эти классы "сверху вниз", а нужно смотреть "снизу вверху", то есть каждый нижний будет иметь свои профиты от того, что над ним находится класс, в котором уже прописаны базовые методы и переменные. Это так?
126 Кб, 1244x1637
#452 #452191
>>452154
А у меня результат пикрелейтед. Но! Если раскомметить $newLeader->setLeader(true), то результат будет точно такой же как и у тебя. Как такое может быть?
122 Кб, 1244x2695
#453 #452193
>>451946
https://github.com/someApprentice/Vector-Com

У меня тоже не получается с наследованием. Я в каждой конкретной специальности прописал в параметрах необходимые значения зарплаты, кофе и документов. И в файле создания департаментов (department.php) изменил добавления сотрудников. А при выводе почему-то все эти значения остаются пустыми.
#454 #452194
>>452185

Ты вообще что-то странное делаешь.

> сlass Comments extends Post


С какой стати Комментарий наследуется от Поста? Комментарий это улучшенный Пост? Это разные сущности и они наследоваться не должны.

И что за «нижний класс»? Это называется предо и потомок (наследник).

Что за «управляющий класс»? Ты какие-то свои термины придумываешь и всех путаешь.

>public $commentText; //массив
Непонятно почему текст комментария это массив

У меня ощущение что ты невнимательно прочел урок про работу с Бд и начал выдумывать какие-то свои странные способы.
#455 #452195
>>452190

Исплоьзуй нормальные термины. Если ты про поле wings то в наследнике оно переопределено. И если ты создаешь объект класса birds то оно имеет значение true.

>>452191

> Как такое может быть?


Посмотри на первые 2 строчки. Если раскомментить код то программа падает с ошибкой и то что дальше не выводится.
#456 #452196
>>452193

> private $salary = 500;


private поле принадлежит только одному классу (а не расшаривается между наследниками) и в каждом классе свое. То есть если ты пишешь

new Manager()

то у тебя там есть независимые друг от друга поля Manager#salary и Employee#salary. Код в Employee видит одно поле а код написанный в Manager другое (впрочем в manager кода нету).

var_dump кстати покажет что поле salary встречается 2 раза в объекте.
#457 #452197
>>452193

> const NAME = 'manager';


Еще мне не нравится переопределение константы в наследнике. По моему ощущению, это не очень правильно так как одна константа принимает разные значения в разных классах — как так? Плюс, у тебя нет способа заставить потомка определить константу.

Правильнее сделать в Employee абстрактный метод getName если надо получать профессию работника.

Или у тебя что-то другое? зачем эта константа?
#458 #452198
>>452196
А. Понял что неправильно сделал. Уже исправил.

>>452197

>Еще мне не нравится переопределение константы в наследнике.


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

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


>


>Правильнее сделать в Employee абстрактный метод getName если надо получать профессию работника.


А она разве не наследуется? Есть же метод: https://github.com/someApprentice/Vector-Com/blob/master/Classes/Employee.php#L37
Или все эти методы в данном случае должны быть абстрактными?
Если да, то можно ли конструктор сделать абстрактным?

>Еще мне не нравится переопределение константы в наследнике.


Ты мне советовал сделать >>451707

>Название надо сделать константой вроде Employee::JOB_ENGINEER.



Наверно, я тебя не правильно понял. Эти константы все константы названия сотрудников нужно было задать в Employee?
#459 #452199
>>452198

> Эти константы все константы названия сотрудников нужно было задать в Employee?


Было бы неплохо но в правильном ООП предок ничего не знает про своих потомков так что нет.
#460 #452205
>>452122

>Лучше делать роутинг на стороне php и не беспокоиться по поводу сервера.


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

>>452126

>Яндекс не приукрашает адрес страницы поиска


>не надо переделывать URL которые генерирует форма поиска


Но яндекс тоже меняет URL при поиске, например https://slovari.yandex.ru/%D0%BC%D0%B0%D0%BC%D0%BA%D0%B0/en/
Да, это словари, а не веб-поиск, но и у меня проект словаря.

А вообще, я не против самого поиска с URL вида "test.com/?search=слово" (у меня сейчас там выводится список найденых слов). Но вот потом я хочу, кликнув на слово, попасть на отдельную страницу с урлом "test.com/слово". Как этого добиться?
#461 #452229
Аноны, объясните аутисту про MVC, ООП. Нихуя не понимаю че за модель, че за вью, че за контроллер. Представление о том, что модель это типа модули сайта, вью шаблоны там дизайны, а контроллер это все объединяет есть, но я все равно сосу хуй.
#462 #452231
У меня вопрос про вторую задачу о векторе. Мне лучше каждую должность обозначить своим собственным классом? Типа сначала создать класс Employee, а после этого унаследовать от него еще 4 класса, в виде менеджера, маркетолога и тп? И нужен ли класс департамент? Мне кажется что да, буду сразу создавать объект напичканый этими менеджерами и инженерами? Всё правильно думаю?
#463 #452235
ДС-аноны, знает кто контору QSOFT, у них вакансия с прошлого года висит странно это
#464 #452246
Есть класс с 4 свойствами, на одной странице нужные все 4 свойства, на другой нужно создать объект только с одним свойством, можно сделать так:

$n = new Klass ("","","", $email);

Или лучше изменить саму структуру классов и добавить наследника?
#465 #452264
>>452246
Суть в том что есть метод для вывода всего что есть в базе данных, и собственно первые три свойства это поля базы данных, поэтому передавать их как я понял не надо в этом случае. Как же правильно написать объект в этом случае?
#466 #452265
>>452264
Передавай поля в массиве
$n = new Klass (array('email', name));
#467 #452280
>>452120

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


если обозначить их через класс, тогда между блоками будет разное расстояние, из-за того что это блочно-строчные типы.
#468 #452298
>>452231
Вот посмотрите, такая "планировка" задачи - есть хорошо?
#470 #452308
>>452298
А ты по другому можешь сделать?
#471 #452309
>>452231

>И нужен ли класс департамент


Нужен или нет, это тебе уже решать. Если его не будет, ты всех работников будешь хранить в обычном массиве.
#472 #452312
>>452308
Я не понял этого вопроса? Типа как мне видится, так и надо делать?
>>452309
ну тогда в свойствах работника сделать пункт с указанием на то, к какому департаменту он принадлежит? Красивее имхо и логичнее завести таки класс департаментов.
#473 #452316
>>452312

>Типа как мне видится, так и надо делать?


Да

>Красивее имхо и логичнее завести таки класс департаментов.


Определись с функционалом. Вообще, проще будет все в БД забить и с ней уже работать, связывая таблицы между собой. А так да, можно и так как ты это хотел сделать.

Вот, накидал примерно, это делается.
http://ideone.com/RNZx6g
#474 #452318
>>452316
почему там эхается весь твой скрипт в ответах?

Алсо я не понимаю что за функция Worker
#475 #452320
>>452318

>почему там эхается весь твой скрипт в ответах?


Не представляю. Я все на локальном апаче делаю.

>Алсо я не понимаю что за функция Worker


Конструктор класса, а имя просто такое же как и самого класса должно быть.
#476 #452321
>>452318

>Алсо я не понимаю что за функция Worker


Можешь смело менять название на __construct и ничего не изменится
#477 #452325
>>452318

>почему там эхается весь твой скрипт в ответах?


Если тебе еще интересно. Программа эхалась из за <? вначале вместо <?php. Посто настройки php разные у у меня и у ideone, но вообще, признаком хорошего тона является <?php
#478 #452326
>>452320
Ну я так и подумал что конструктор.
>>452321
Переделал и теперь ошибка в строчке:
echo $ivan->getWork()->getName();

http://ideone.com/qerOQE
#479 #452328
>>452326
перед construct нужно __ 2 символа подчеркивания , когда как у тебя - один
#480 #452330
>>452328
Всё, вроде работает. Но все равно чет я не въезжаю пока в этот код.
особенно в конструкцию с $ivan->getWork()->getName();
Я еще понял бы что значит $ivan->getWork(); или $ivan->getName();
#481 #452331
>>452330
для наглядности можно будет написать:

$rabotaIvana = $ivan->getWork();
$nameRaboty = $rabotaIvana->getName();

Просто, мы не записываем в переменную, а сразу получаем название фирмы.
#482 #452341
>>452331
я вот этого тоже пока понять не могу. Ладно у тебя есть объект, да? Ты пишешь $обьект->метод();
тип верно?
Ну допустим сохранили в переменную результаты:
$переменная = $объект->метод();
Ок, но потом какого хрена к тому что у нас в переменно какие-то методы применимы? Там же не объект лежит? Почему можно писать так?
433 Кб, 1280x1024
someApprentice #483 #452343
ОП, а ты какой осью пользуешься? Я вот поставил себе Elementary OS. Красевнько, только очень не привычно все после 10 летнего сидения за Виндой
#484 #452346
>>452341
Почему ты думаешь, что результатом выполнения функции не может быть другой объект? В данном случае, $ivan->getWork() и возвращает объект.
#485 #452365
>>452343
Эмм это линукс?
Не оп
#486 #452366
>>452365
Да, а что такого?
#487 #452369
>>452365
Говногном, свистоперделки, системд. И ты еще спрашиваешь, что такого?
#488 #452373
>>452369
А аргумент будут?
#489 #452384
Оп! Ты вообще классный пацан, я тебе уважаю, ты вообще всё так по существу говоришь и вообще чётко объясняешь. По качеству всё так делаешь. У меня к тебе вопрос, я вот с нуля начал учиться опираясь на составленный твоим педагогическим гением мудрый учебник, вооот. И как об стенку горох бьюсь уже второй день над заданием, ты сказал изменить цикл, я вот его изменяю и у меня ошибка по ходу дела выпала. В одиннадцатой строчке ему не нравится точка с запятой и "echo" кажется.
ps сильно не бей.
<?php

error_reporting(-1);

$opName = 'молодец';
$opTrueName = 'хуй';
$text = 'оп всё таки...';

$i = mt_rand(1,10);

for (echo $text; $i <= 10; $i++) {
echo "$opTrueName/n";
$score++;
}
#490 #452388
>>452384

>for (echo $text;


Иди еще раз с нуля все учи.
#491 #452396
>>452388
А я уже и так и сяк и жопой об косяк его. Предыдущие задания нормально получались. Если ты ткнёшь меня еблом где я туплю, то буду благодарен.
#492 #452398
>>452396
Тебя уже ткнули.

>>for (echo $text;


Что это такое? Где ты в уроках видел такую конструкцию? Можешь пояснить зачем там echo?
#493 #452400
>>452398
Обана, охуеть! Ну и мудак! Спасибо, ребята!
Уебываю, просто блядь думал вывести её ну как раньше типа циферки и... Да да, я знаю, что кретин
#494 #452402
>>452384

Внутри скобок for нельзя использовать echo. Это странность php который почему-то не разрешает так делать. А так, твой код вполне правильный.

Потом ты изучишь функции. Если ты заменишь echo на вызов функции то все заработает.

Пока можешь заменить echo на print($text): http://ideone.com/nZy8S5

Ну и исправь там ошибку с переменной score.
#495 #452404
>>452388

Если заменить echo на print () то все заработает. В for можно вписать любую команду, не только $i = 0. Хотя в реальных программах конечно такие трюки делать не стоит.

>>452398

Если вместо echo исплоьзовать print то так можно делать.

>>452400

Ты можешь echo поставить перед for.
#496 #452406
>>452402
Правила хорошего тона itt.
Может, ему не стоит привыкать так делать?
#497 #452407
>>452406

Конечно не стоит. echo лучше поставить перед циклом, а создание $i внутрь:

echo ....;

for ($i = mt_rand(...); ....)
#498 #452410
>>449425
ОП, доброго времени суток.
Из всех тредов, твой мне показался наиболее дружелюбным и привлекательным.
Чуть расскажу о себе вводные данные.
Мне 22 года, ненужная вышка гуманитарий, мамка приказала, работа, не требующая особых умственных усилий. Недавно я заглянул внутрь себя и честно сказал: "Мне это все нахуй не нужно." Вспомнил детскую мечту, когда еще впервые познакомился с компьютером - стать программистом. Мне всегда нравилось возиться с пекарнями, цифровой и вычислительной техникой. Кажется, такие как я называются свитчерами - те, кто работает пока еще на своей текущей работой, но в свободное время полностью занимаются самообучением, чтобы перекатиться в другую область. Пока достаточно, собственно, что я у тебя хотел спросить: какой набор знаний необходим джуну для того, чтобы получить работу в ДС, ДС2? Я упарывался ХТМЛ, КСС, но тонуть в простой верстке я не хочу, хочу шевелить мозгами и писать код. Вот только я теперь запутался, нужно ли пхп разработчику отлично знать хтмл, ксс и чем вообще занимается этот ПХП разработчик? Сколько времени мне может потребоваться для того, чтобы понять синтаксис, изучить ООП, склепать для опыта пару простых проектов?
Сумбурно, но как смог. Жду ответа, ОПчик.
#499 #452412
>>452410

>какой набор знаний необходим джуну для того, чтобы получить работу в ДС, ДС2?


http://archive-ipq-co.narod.ru/

>Сколько времени мне может потребоваться


Индивидуально же, а так около полгода в среднем.
Не ОП, раз уж это стало важно на анонимных бордах.
#500 #452422
Спасибо всем великим мыслителям и Опу, что снизошли до меня и указали на праведный путь. Раз вы такие милые, то буду иногда захаживать И задавать тупые вопросы.
http://ideone.com/cbG3D1
#501 #452423
>>452422
всё таки Хуй! же никогда не будет
#502 #452424
>>452366
Первый раз про этот дист слышу просто,
это же просто подкрашенная убунту
я вот сейчас на Дебиан перешел
#503 #452428
>>452407
Убунту и Elementary OS, это подкрашенный Debian, если что.
#504 #452433
>>452410
Вдобавок, я правильно понимаю, чтобы стать хотя бы джуном, мне необходимо уметь верстать сайты? Или достаточно в общих чертах знать хтмл ксс?
#506 #452439
ОП, привет.
Я начал учить похапэ по книге Энди Харриса "PHP MySQL для начинающих". Он мне предложил скачать PHPTriad, потому что в его примерах нужен будет Апач, мусекуэль и интерпретатор. Я в душе не ебу как всю эту хуйню настраивать, но если я все это освою, то могу хуярить на работку?
#507 #452442
Привет, ОП. Я не программист, но немного кодить на php умею. Сейчас занимаюсь латинизацией русского языка (хобби). Хочу написать программу для автоматического перевода текстов. Вопрос, как сделать, чтобы "я" в начале слова и отдельно переводилось как ja, а в остальных случаях как ä?
#508 #452445
>>452442
У тебя уже есть рабочая страничка, которая делает все, кроме "я"?
#509 #452447
>>452229

>объясните аутисту про MVC, ООП


Это непростая задача, тем более в интернетах уже все есть (хабростатьи поищи, например). Читай больше материалов, перечитывай. Сначала по ООП потом MVC.
32 Кб, 543x600
#510 #452455
Перепост, случайно запостил в прошлый тред.
Котоны, нид хелп.
Вот и еще одно собеседование, которое я провел весьма достойно(не омежничал, ответил уверенно и хорошо на все вопросы, сделал практическую часть, ответил на теоретическую часть). АшЭр кивал и улыбался, Прогер сказал, что я малаца и все верно ответил\решил и вот мне сказали, что решение будет в среду максимум. Сегодня четверг, а это значит что меня в очередной раз пидорнули с вакансией. Ходить дальше думаю смысла нет, это не первый раз, а денег нет. Так вот думаю начать фрилансить помалой, но как начать? Посмотрел на одеск там какой-то пиздец, какие-то поиски в свою команду, какие-то тесты на fluent english по скайпу, какие-то требования, быть индусом\филипинцем. Как найти себе работу\подработку на пыхе? Кто фрилансит поясните нубу попонятней, плз.
#511 #452456
>>452455
На хабре видел статью, что нормальные прогеры не нужны, так как могу уйти.
Не думаю, что это про тебя, но может тебе попробовать в достойную фирму пойти, рас ты такой охуенный?
#512 #452457
>>452456
Ну, я в нормальной уже пидорнулся раз, потом еще 3 раза в компаниях попроще. В общем, уже думаю бросить всю эту хуйню. Достало.
#513 #452460
>>452457
Может позвонить и спросить у них что с тобой не так?
Рили, это самый быстрый и верный способ.
#514 #452461
>>452456

>раз


Написал как чурка, лол.
#515 #452462
>>452437
Слишком большой слой краски
55 Кб, 500x484
#516 #452464
>>452460
Я, когда меня в крупной фирме задинамили, так и сделал, в ответ получил какие-то ашерские сопли о том, что подобную информацию фирма не дает, и она лично не имеет права разглашать свое мнение. Интересно, что после собеседования, которое длилось в течении 2-х недель(несколько уровней тестов, тестовое задание и наконец собеседование с ашером и техническим хуйцом-спецом) я был уверен, что мои шансы больше 90%, потому как за собой ни единой промашки не нашел. А потом такой облом. Реально я как-то уже устал от стольких обломов за столь коротикий промежуток времени. А теперь еще и днищефирма меня бортанула, это уже и вовсе дно. Хочется накидаться чем-нибудь и побыть в коматозе неделю другую пока не отпустит.
#517 #452466
>>452462
Согласен, но для начала пойдет же.
Не все могут взять и собрать линух под себя. Но, когда нибудь и он перейдет на дебиан
#518 #452467
>>452445
Конкретно сейчас нет, но я уже делал подобную программу и представляю как её написать. Меня интересует именно момент с йа и я.
#519 #452469
>>452464
А какой город?
Расскажи что было на собеседовании в днищефирме и нормальной.
#520 #452471
Сосаны, у меня не выходит нормально работать с url после гет-запроса. Поясню свою проблему:
у меня html-шаблон отделен от php кода; в шаблоне есть две ссылки <a> с текстом "Русский" и "Английский", нажимая на которые я хочу менять значение переменной, которая в свою очередь будет подставлена в href этих ссылок. Например, мой url выглядит так - блабла.рф/?q=&lang=ru. Тыкнув по ссылке "Английский" я хочу сменить переменную lang на "en", и перейти уже по этому новому url. Как это сделать? В самом php файле я могу сформировать запрос ($data = array('q' => $searchField, 'lang' => $lang); $link = "?" . http_build_query($data);), но я не понимаю, как это подставить в шаблон.
#521 #452473
>>452467
У тебя два пути - регулярные выражения, или же самому написать небольшую функцию распознавания места в тексте. В первом варианте тебе поможет гугл, а во втором логика простая - проверяешь символы вокруг твоего "я", и если там с обеих сторон пробел или пунктуация, то это отдельное слово "я".
#522 #452474
>>452471
Смотри как работают шаблонизаторы.
Сделай функцию которая будет принимать массив данных для шаблона и его название, а на выходе валидный htmlвнутри просто заменяй {{имя_переменной}} на значение этой переменной из переданного массива. А вообще, просто используй уже готовые шаблонизаторы.
#523 #452475
>>452455
Анончик, скажи, а ты с нуля изучал? Или у тебя уже был опыт в сфере ИТ и какие-то проекты на пыхе?
24 Кб, 604x419
#524 #452476
>>452469
1)Днофирма
ашер: пара вопросов, кто такой , почему ИТ, какой опыт.
тех-хуец: все по книжке шевченко, я серьезно.
2)Крутая фирма
ашер: типичные ебанутые ашерские вопросы, симтуационные вопросы, о будущем. о прошлом, о коллегах, ла-ла-ла, прочий несуразный бред за который хочется просто послать всех их с фирмой нахуй, но я держался достойно, отвечал лаконично. красиво и вдумчиво. пояснял свою мысль. дополнял аргументами.
Спец-хуец: пыха, сикуел, жиквери, жиэс, все до мелочей, какие-то практические задачки на пыху(фуфло а не задачки), на сикуел запросы(посложнее), на жиквери(среднячок и крутые). В общем, подозрение, что на крутой меня ашер бортанула, может потому что я слишком уверенно себя вел(шутил, но уместно, пипл смеялся, чувствовал себя раскованно, отвечал смело и широко). Х3. Но на днофирме почему - не знаю.
#525 #452478
>>452475
С нуля, опыт небольшой есть, хочу устроиться в фирму, чтобы стать оче-уверенным разрабом. Хотя бы пару лет побатрачить, потом может и на фриланс, хотя вряд ли - я слишком ленив, боюсь самоконтроля не хватит.
#526 #452480
>>452476

>может потому что я слишком уверенно себя вел(шутил, но уместно, пипл смеялся, чувствовал себя раскованно, отвечал смело и широко)


this, но это лишь мое мнение.
Больше нет никаких вариантов, раз ты все ответил. Даже странно что бортанули.
Но, может много денег просил?
#527 #452481
>>452480

>денег много просил


Нет, посмотрел статистику за текущий год и взял чуть меньше среднего. Пояснил, что готов поработать за меньшую сумму чем оклад на испытательном сроке.
#528 #452482
>>452474
Я прочитал обе статьи (оповскую и ту, на которую оповская ссылается), но с их помощью у меня не выходит решить свою проблему. Если бы мог самостоятельно, то не писал бы сюда... А использование сторонних шаблонизаторов мне кажется не очень правильным в страничке на 10 строк.

Может кто-то поможет написать правильно эту строку в шаблоне <?= '<a href="/?' . htmlspecialchars($link, ENT_QUOTES) . '"></a>' ?>, чтобы она еще и переменную $lang как-то могла изменять?
#529 #452483
>>452481

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


Вот так пришел и пояснил?
Мне казалось, что наоборот, надо пояснять что бы работать на испытательном строке за полный оклад.
Ты просто шокировал их своей уверенностью.
#530 #452484
>>452475
Как много времени ты потратил на изучение пыхи и пришел к решению поиска работы? И какими навыками ты уже обладал до обучения?
#531 #452485
>>452423
Лол? Сейчас перезагрузил скрипт и у меня как раз выпало "Всё таки Хуй!". "Всё таки Хуй!" даже чаще выпадает чем "Всё таки молодец".
#532 #452486
>>452484
До обучения хтмл и ксс, потом начал здесь читать тред, кажется с 13-го, потом начал практиковаться сам - гиты-хуиты, линуксы-хуинуксы, вп-хп, мвц-хуимц и прочая.
#533 #452487
>>452483
Но, не сидеть же омежным чуханом. Они ищут сотрудника - я говорю, вот Я сотрудник, я БУДУ работать, я СМОГУ\СДЕЛАЮ. или обычно ищут: ну-хуего-никогда-не-работал-може-получится
#534 #452488
>>452482
1. Размещай шаблон в имя_шаблона.tpl.
2. Пиши напиши свой шаблонизатор.
3. Используй его.

<a href="/?lang={{lang}}">{{lang}}</a>

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

Все.
#535 #452489
>>452486
А хтмл ксс - работал версталой?
#536 #452490
>>452489
Нет, просто, чтобы быть в теме, знать как устроено и сверстать. что-либо, если потребуется, хотя, если честно мне не очень нравится верстка - нудно. Я для себя бутстрап открыл и подсел.
#537 #452491
>>452487
Вряд ли мы сейчас придем к какому либо выводу, так как не знаем в чем проблема.

Пробуй еще, ходи на собеседования. Но главное - узнай как то в чем проблема.
На собеседовании обычно не тычут лицом в ошибки, а лишь кивают. Может ты ошибся просто?
#538 #452493
>>452489
Сколько хтмл ксс учил? Не посылай меня нахуй, сам в подобном положении нахожусь, примеряюсь.
#539 #452494
>>452491
Но, я ведь придя домой первым делом полез курить маны по тем вопросам, где я не был уверен на 100% и оказалось, что был прав. Да и вряд ли тебе скажут - ВСЕ ВЕРНО, МАЛАЦА, если ты ошибся или я чего-то не понимаю в современном мире.
#540 #452495
>>452494
Иди еще пробуй.
#541 #452496
>>452493
Долго, месяцев 4-5, потому как вечером после работы и не каждый день. Так-то теперь я согласен, что его можно на ять за месяц осилить не напрягаясь.
#542 #452497
>>452423
А, нет, епта. Глянул у меня там ошибка какая-то со score. Я её не заметил, всё вроде нормально работает.
#543 #452499
>>452488
Это слишком сложно. Я хотел сделать это обычными методами, теми, которые советует ОП. По его словам, писать свой шаблонизатор не нужно, и я с ним согласен - на тестовой страничке этого делать явно не стоит. Должен же быть способ сделать это проще.
#544 #452501
>>452497
А, нужно было изначально присвоить значение переменной = 0.
#545 #452502
>>452499
Используй шаблонизатор.
#546 #452505
Аноны, у меня проблема уже на старте, лол.

http://ideone.com/rmWHi8

Как сократить код? Пишу как в примере - выдает ошибку, пришлось задать переменные.
#547 #452507
>>452502
Хорошо, но ответь пожалуйста на последний вопрос: без использования стороннего шаблонизатора или же написания своего, используя способы ОПа сделать ссылку, которая записывает данные в переменную, невозможно?
#548 #452508
>>452507
Покажи этот способ. Я не хочу листать весь тред.
#549 #452509
>>452505

>как в примере


Каком
#550 #452510
>>452505
О, круто, я новичок, а уже могу давать советы.
Дай оригинальный код, а то это - какая то индусская вермишель.
#552 #452513
>>452509
Он про учебник великого гения Опа.
Пусть даст то что сделал изначально.
#554 #452517
>>452513
А учебник-то где? Я ослеп или его нет в шапке? Киньте линк.
#555 #452518
>>452517
Он ссылку кинул.
>>452516
Лол, я тебе говорю дай ссылку на ideone где у тебя ошибка и где ты делал как велит тебе Гениальный Оп и где у тебя не получается.
#556 #452519
>>452508
Ну вот тебе пример того, что советует ОП (и другие тоже, ага):
<html>
<p>Привет, <?=$this->e($this->name)?>! Тебе <?=$this->e($this->age)?> лет.</p>
</html>

Взято отсюда http://www.phpinfo.su/articles/practice/shablony_v_php_chast_2.html

По такому принципу у меня и работает отдельный шаблон. Но вот теперь я застрял.
#557 #452520
>>452518
http://ideone.com/rmWHi8 - мой код с придуманными костылями.

http://archive-ipq-co.narod.ru/l1/variables.html - здесь код ОПа.
#558 #452521
>>452511
http://ideone.com/vbhu63
Так тебе надо было сократить?

>>452518
Это я ему твое сообщение отправил.
#559 #452523
>>452520
Так проблема в том, что ты неправильно переписал Гениальный Код Опа. А ты хотел чтобы за тебя просто всё решили.
#560 #452524
>>452521
Спасибо, понял свою ошибку.
#561 #452525
>>452505
http://ideone.com/0VGveA
хз, у меня ничего не выдает ошибку. Ты показывай сразу код который её выдает.
#562 #452526
>>452524
А какая ошибка то была?
#563 #452527
>>452523
У меня было свое решение - оно работало.
Просто я сначала писал вот такую хуету:
mt_rand($1, $2)
Отсюда и ошибка.
#564 #452529
>>452527
Ну так и надо было кидать тот код. Экстрасенсов тут нет
#565 #452531
>>452519
Так то не шаблонизатор, а просто htmlspecialchars
http://www.php.su/functions/?htmlspecialchars
#566 #452532
>>452531
А я и не говорил, что это шаблонизатор. Я говорил, что у меня html-"шаблон" отделен от основного кода. Правда теперь я не знаю, как работать с url в таком случае.
#567 #452533
>>452519
>>452532

Кидай свой код на ideone. Я просто не понимаю на чем т застрял. Да, так можно сделать ссылку, но на чем именно ты застрял?
#568 #452534
>>452533
Сейчас сделаю.
#569 #452536
>>451697
http://rghost.ru/7VzdkM8Tw переделал. Извиняюсь за ргхост, с гитхабом еще не разбирался.

>У тебя на кнопке See portfolio активна только надпись, а кликать по краям бесполезно


Вот это я не смог сделать. С кнопками соц-сетей получилось, а с этой нет, я когда делаю height 100% на ссылку, она становится больше родителя почему-то. Я уже и inline-block на родителя ставил, и в пикселях значение подбирал - не помогло. Еще я не пойму, почему когда я задаю, допустим, margin-top для одного строчно-блочного элемента, то вниз сдвигается и соседний с ним?
#570 #452539
Это снова я на связи.
Сыграйте в мою веселую рулетку, я старался:
http://ideone.com/z1hrJV
Если учесть, что пользовался только тем материалом, который дал ОП в своем учебнике - норм? Как можно сократить этот код?
#571 #452540
>>452536
Хм, странно, там теперь вместо монитора второй андроид, хотя до этого все работало. Внезапно ксс стал кейс-сенсетив и стиль не применился, потому-что я обращался к нему с маленькой буквы. Вот исправленная версия http://rghost.ru/6zhRD4mCj
#572 #452541
>>452539
Небольшие изменения внес.
#573 #452542
>>452539
Хоспаде, первый день штолесука. Вообще, лично я поклонник switch для подобных целей, как-то наглядней смотрится + ты бы хоть кнопку пуска запили и какой-то сопроводительный заголовок, а то вообще днищерулетка получилась.
#574 #452543
>>452542
Да, первый час даже.
#575 #452544
>>452542
>>452539
Ну, и стиль проебал, выпало девять - Ты ПОДЕБИЛ, тогда уж.
#576 #452547
>>452539
http://ideone.com/6PGLwi
так лучше

другой анон
#577 #452548
>>452547
Вот это классно! Спасибо, буду знать.
#578 #452549
>>452533
https://gist.github.com/anonymous/a66242a8ceba1a764d79
Вот два файла. Сейчас ссылки работают и даже создают правильный url.
Но! Мне нужно, чтобы не просто url писался строкой, а туда подставлялась переменная $lang, которая задавалась в зависимости от ссылки, которую выбираешь. Кликнул на "Русский" - переменная $lang стала "ru" и ушла в url, кликнул на "Английский" - переменная стала "en" и ушла в url. И также у меня почему-то в форме не срабатывает подставление $lang.
#579 #452550
>>452476

Может просто пришел кандидат который был лучше по соотношению цена/знания? Или например они хотели человека с опытом и боятся брать без опыта? тут может быть 100500 причин.
#580 #452551
>>452476

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

Насчет фриланса, есть еще такая вещь как постоянная удаленная работа, выгода в том что не надо тратить время на поиск заказчиков, переговоры.
#581 #452552
>>452548

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

>>452539

Норм. Сократить можно через массив.

>>452536

> >У тебя на кнопке See portfolio активна только надпись, а кликать по краям бесполезно


> Вот это я не смог сделать


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

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

> я когда делаю height 100% на ссылку, она становится больше родителя


Может у тебя паддинг там есть. Ты блочную модель изучал? height это внутренняя высота элемента или наружная?

> Еще я не пойму, почему когда я задаю, допустим, margin-top для одного строчно-блочного элемента, то вниз сдвигается и соседний с ним?


Можешь на jsfiddle сделать пример? Так, виновато может быть вертикальное выравнивание или еще что-то.

>>452540

> Внезапно ксс стал кейс-сенсетив


Имена классов и id по моему чувствительны к регистру.
#581 #452552
>>452548

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

>>452539

Норм. Сократить можно через массив.

>>452536

> >У тебя на кнопке See portfolio активна только надпись, а кликать по краям бесполезно


> Вот это я не смог сделать


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

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

> я когда делаю height 100% на ссылку, она становится больше родителя


Может у тебя паддинг там есть. Ты блочную модель изучал? height это внутренняя высота элемента или наружная?

> Еще я не пойму, почему когда я задаю, допустим, margin-top для одного строчно-блочного элемента, то вниз сдвигается и соседний с ним?


Можешь на jsfiddle сделать пример? Так, виновато может быть вертикальное выравнивание или еще что-то.

>>452540

> Внезапно ксс стал кейс-сенсетив


Имена классов и id по моему чувствительны к регистру.
#582 #452553
>>452549
http://ideone.com/TASKvy
Запусти пример у себя на компьютере и все увидишь.
#583 #452554
>>452552
Ты ОП? Почему не через github уроки?
#584 #452555
>>452552
Я все задания выполнял так-то по порядку. Ссылку сделал блочным элементом, дело не в этом.

>Можешь на jsfiddle сделать пример?


Я делал маржин для надписи ebpaint Но сдвигался и логотип, хотя я его вытащил в отдельный див.

>Имена классов и id по моему чувствительны к регистру.


Фиг знает, я пока доктайп не написал (хотя может это произошло еще раньше), у меня все нормально было, а потом внезапно обнаружил, что у меня второй андроид вместо монитора.
#585 #452557
>>452553
А можешь помочь именно с моим примером? Просто здесь логика немного другая.
#586 #452559
>>452549

> Мне нужно, чтобы не просто url писался строкой, а туда подставлялась переменная $lang, которая задавалась в зависимости от ссылки, которую выбираешь


У тебя в самом начале написано $lang = 'ru'; Это значит что в этой переменной будет строка 'ru'.

> без использования стороннего шаблонизатора или же написания своего, используя способы ОПа сделать ссылку, которая записывает данные в переменную, невозможно?



Шаблонизатор вообще не при чем. Ты понимаешь, как работает «ссылка»? PHP перед запуском твоего скрипта разбирает строку запроса query string (то что идет после знака вопроса) и заносит значения в $_GET. Например ты набрал в адресной строке

index.php?a=1&b=2&c=3

В этом случае PHP поместит в массив $_GET 3 элемента:

'a' => 1,
'b' => 2,
'c' => 3

Ты можешь это легко увидеть если поставишь в начале своей программы var_dump($_GET) и откроешь эту ссылку.

Аналогично при отправке POST-формы PHP извлекает переданные значения из тела запроса (тело запроса составляет и отперавляет браузер когда ты жмешь кнопку Отправить) и помещает найденные значения в $_POST.

Также я советую прочесть, если ты еще не читал, эти страницы мануала:

http://php.net/manual/ru/language.variables.external.php
https://php.net/manual/ru/tutorial.forms.php

Прочти их, если не читал, посмотри что выводит var_dump и если что-то не заработает или будет непонятно, задавай вопрос, мы постараемся ответить.

> И также у меня почему-то в форме не срабатывает подставление $lang.


А ты ее туда поставляешь? Я не вижу в форме поля с именем lang, я вижу только поле text. Следовательно при отправке формы на сервер будет передано только значение text.

Ну и еще вопрос, а у тебя включено отображение ошибок? Так как если просто открыть index.php то должны выводиться ошибки. Если ты их не видишь то надо их включить.

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

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

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

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

> Мне нужно, чтобы не просто url писался строкой, а туда подставлялась переменная $lang, которая задавалась в зависимости от ссылки, которую выбираешь


У тебя в самом начале написано $lang = 'ru'; Это значит что в этой переменной будет строка 'ru'.

> без использования стороннего шаблонизатора или же написания своего, используя способы ОПа сделать ссылку, которая записывает данные в переменную, невозможно?



Шаблонизатор вообще не при чем. Ты понимаешь, как работает «ссылка»? PHP перед запуском твоего скрипта разбирает строку запроса query string (то что идет после знака вопроса) и заносит значения в $_GET. Например ты набрал в адресной строке

index.php?a=1&b=2&c=3

В этом случае PHP поместит в массив $_GET 3 элемента:

'a' => 1,
'b' => 2,
'c' => 3

Ты можешь это легко увидеть если поставишь в начале своей программы var_dump($_GET) и откроешь эту ссылку.

Аналогично при отправке POST-формы PHP извлекает переданные значения из тела запроса (тело запроса составляет и отперавляет браузер когда ты жмешь кнопку Отправить) и помещает найденные значения в $_POST.

Также я советую прочесть, если ты еще не читал, эти страницы мануала:

http://php.net/manual/ru/language.variables.external.php
https://php.net/manual/ru/tutorial.forms.php

Прочти их, если не читал, посмотри что выводит var_dump и если что-то не заработает или будет непонятно, задавай вопрос, мы постараемся ответить.

> И также у меня почему-то в форме не срабатывает подставление $lang.


А ты ее туда поставляешь? Я не вижу в форме поля с именем lang, я вижу только поле text. Следовательно при отправке формы на сервер будет передано только значение text.

Ну и еще вопрос, а у тебя включено отображение ошибок? Так как если просто открыть index.php то должны выводиться ошибки. Если ты их не видишь то надо их включить.

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

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

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

Проверить, работает ли вывод ошибок, можно запустив скрипт содержающий обращение к несуществующей переменной вроде echo $sdgasdad; и проверив, выведется ошибка или нет. Если все верно, то должна вывестись.
21 Кб, 604x386
#587 #452561
>>452550
>>452551
Угу, я уже мысленно многие варианты перебирал,спасибо за внимание и все такое.
#588 #452563
>>452555

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


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

> Я делал маржин для надписи ebpaint Но сдвигался и логотип, хотя я его вытащил в отдельный див.


Трудно сказать в чем дело. Если бы ты мог сделать упрощенный пример (только эту часть страницы) на jsfiddle или codepen, я бы мог посмотреть.

> Ссылку сделал блочным элементом, дело не в этом.


Дело не в паддинге? Также, ты учел что height в процентах работает только если у родителя высота тоже задана в пикселях или процентах?
#589 #452565
>>452557
https://ideone.com/Q9tsSJ
а дальше читай вот его >>452559
#590 #452568
>>452563
Ок, вот пример:
http://jsfiddle.net/aadu8eyu/
45 Кб, 566x766
#591 #452569
Ищу анонов для совместной разработки чего-нибудь интересного и нескучного АИБ/очередной микрофреймворк.
Все равно на чем пишешь. Предпочтителен PHP, раз решил запостить это здесь, но можем попробовать хоть какой-нибудь Hack. Ну или же написать и оформить интересный Руби-гем.

Telegram: http://goo.gl/foJd40 Могу оставить и скайп, но кому он нужен в 2015 году?
#592 #452570
Аноны, кому я сейчас не успел ответить, я отвечу попозже, после работы.

>>452554

ОП. Не понял вопрос.

>>452490

И даже мои задания из «Пути HTML» нудные? (((

По моему в верстке есть интересные вещи. Например то, что ты можешь с ее помощью делать страницы, которые тянутся в ширину и не ломаются от смены размера шрифта. Ну и с возможностями CSS3 можно делать всякие интересные вещи. Вот например что можно сделать одним дивом: http://habrahabr.ru/company/paysto/blog/251933/

Не исключаю конечно что не всем это нравится. Но мне изучать особенности CSS в свое время было интересно.

>>452488

> Пиши напиши свой шаблонизатор.


Это очень плохая идея. Почитай http://habrahabr.ru/post/230737/

> С помощью регулярки ищи все {{набор символов}} совпадения и в цикле обрабатывай их,



А ифы и циклы? А вызовы методов? Я сталкивался в одной платной CMS с таким шаблонизатором, и очень хотелось побить автора что изобрел кривой неудобный велосипед вместо использования нативного php или того же twig. Шаблонизатор был настолько плохой что многие вещи пришлось делать яваскриптом, например переводя даты в нужный формат уже после загрузки страницы вместо того чтобы сразу вывести их как нужно.

>>452474

Ему не шаблонизатор нужен.

>>452471

> Тыкнув по ссылке "Английский" я хочу сменить переменную lang на "en", и перейти уже по этому новому url.



Тебе надо в href у этой ссылки выводить нужный URL с нужными параметрами. То есть ты должен там выводить что-то вроде:

index.php?lang=en
#592 #452570
Аноны, кому я сейчас не успел ответить, я отвечу попозже, после работы.

>>452554

ОП. Не понял вопрос.

>>452490

И даже мои задания из «Пути HTML» нудные? (((

По моему в верстке есть интересные вещи. Например то, что ты можешь с ее помощью делать страницы, которые тянутся в ширину и не ломаются от смены размера шрифта. Ну и с возможностями CSS3 можно делать всякие интересные вещи. Вот например что можно сделать одним дивом: http://habrahabr.ru/company/paysto/blog/251933/

Не исключаю конечно что не всем это нравится. Но мне изучать особенности CSS в свое время было интересно.

>>452488

> Пиши напиши свой шаблонизатор.


Это очень плохая идея. Почитай http://habrahabr.ru/post/230737/

> С помощью регулярки ищи все {{набор символов}} совпадения и в цикле обрабатывай их,



А ифы и циклы? А вызовы методов? Я сталкивался в одной платной CMS с таким шаблонизатором, и очень хотелось побить автора что изобрел кривой неудобный велосипед вместо использования нативного php или того же twig. Шаблонизатор был настолько плохой что многие вещи пришлось делать яваскриптом, например переводя даты в нужный формат уже после загрузки страницы вместо того чтобы сразу вывести их как нужно.

>>452474

Ему не шаблонизатор нужен.

>>452471

> Тыкнув по ссылке "Английский" я хочу сменить переменную lang на "en", и перейти уже по этому новому url.



Тебе надо в href у этой ссылки выводить нужный URL с нужными параметрами. То есть ты должен там выводить что-то вроде:

index.php?lang=en
#593 #452572
phpMyAdmin -- это хорошо?
#594 #452573
>>452572

> MySQL — это хорошо?

#595 #452575
>>452559
Спасибо, ОПушка. С вардампом до меня дошло, что происходит и половина вопроса решилась - в коде я просто делаю вот это $lang = $_GET['lang'], а на страничке в каждой ссылке вот это href="/?q=' . htmlspecialchars($searchField, ENT_QUOTES) . '&amp;lang=en" и у меня все срабатывает! И переменная записана, и ссылка теперь правильная.

Остался второй вопрос - про использование языка во время отправки формы.

>А ты ее туда поставляешь? Я не вижу в форме поля с именем lang, я вижу только поле text. Следовательно при отправке формы на сервер будет передано только значение text.


Получается, что нужно создать скрытое поле, если я не хочу еще один input с выбором языка?

Насчет ошибок - да, все норм.
#596 #452576
>>452573
Ну МайАдмин-то нужен? Или без него можно/следует обойтись? Я только начинаю курить.
#597 #452580
>>452576
Дело вкуса. Можешь использовать прикладной софт типа HeidiSQL.
#598 #452583
>>452580
Благодарю.
405 Кб, 867x598
2105 Кб, 1265x529
#599 #452587
>>452471

> я не понимаю, как это подставить в шаблон.


В шаблоне пишешь

href="<?= html($link) ?>"

>>452442

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

>>452343

Windows, Cygwin + debian в виртуалке.

Debian хорошая ОС, но меня напрягает что софт там очень стабильный, то есть старый. PHP старый, lxc старый глючный, emscripten без плясок не установишь.

Пикрелейтед показывает как это выглядит.
#600 #452590
>>452575

Когда подставляешь текст в ссылку надо кодировать его процентным кодированием ( https://ru.wikipedia.org/wiki/URL#.D0.9A.D0.BE.D0.B4.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_URL ) функцией urlencode либо исплоьзовать http_build_url:

a=<?= htmlspecialchars(urlencode(....), ...) ?>

> Получается, что нужно создать скрытое поле


да

>>452576

Начинающему лучше осваивать консоль. Ну и вместо phpmyadmin мне больше нравится adminer.

>>452568

Это потому что по умолчанию у inline block стоит vertical-align: baseline. Почитай про это своство

http://htmlbook.ru/css/vertical-align
http://htmlbook.ru/samlayout/blochnaya-verstka/strochno-blochnye-elementy
http://web-standards.ru/articles/vertical-align/

И вот эту прекрасную статью

http://css-live.ru/articles/ikf-vertikalnoe-vyravnivanie-v-stroke-chast-1-8-ya-publikaciya-cikla-tajny-css2-1%E2%80%B3.html
#600 #452590
>>452575

Когда подставляешь текст в ссылку надо кодировать его процентным кодированием ( https://ru.wikipedia.org/wiki/URL#.D0.9A.D0.BE.D0.B4.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_URL ) функцией urlencode либо исплоьзовать http_build_url:

a=<?= htmlspecialchars(urlencode(....), ...) ?>

> Получается, что нужно создать скрытое поле


да

>>452576

Начинающему лучше осваивать консоль. Ну и вместо phpmyadmin мне больше нравится adminer.

>>452568

Это потому что по умолчанию у inline block стоит vertical-align: baseline. Почитай про это своство

http://htmlbook.ru/css/vertical-align
http://htmlbook.ru/samlayout/blochnaya-verstka/strochno-blochnye-elementy
http://web-standards.ru/articles/vertical-align/

И вот эту прекрасную статью

http://css-live.ru/articles/ikf-vertikalnoe-vyravnivanie-v-stroke-chast-1-8-ya-publikaciya-cikla-tajny-css2-1%E2%80%B3.html
#601 #452596
>>452590
Спасибо, теперь все встало на свои места. Кстати, я там еще один косяк заметил у себя, так что вот финальный вариант
http://rghost.ru/6gb8tVWKC
#602 #452598
>>452590
Спасибо, няшка, все получилось с этими полями lang. Теперь все красиво переключается и форма отправляет из скрытого поля необходимое значение.
#603 #452725
ОП, я тут продолжаю вкатываться по твоим туториалам.
Пожалуйста, посмотри и укажи, как этот код можно сделать еще проще?
http://ideone.com/imzsjD
#604 #452728
>>452725
Я не ОП, но можешь фигурные скобки из строк в echo убратьЕсли они там не для удобства, конечно.
#605 #452739
Опять нуб на связи. Подскажите, как этот говнокод можно привести в нормальный вид? Натыкал костылей, работает, но вижу, что хуета полная в коде. Таких как я, наверное, называют говнокодер и пхп макака.

http://ideone.com/HJNZhk
#606 #452741
>>452739
Еще раз проверил - слова через раз генерируются, в чем проблема? Догадываюсь, что в mt_rand, но не могу понять.
#607 #452742
>>452741
Смотри ошибки, там внизу они написаны. У тебя типичная ошибка для все начинающих работать с массивами.

PHP Notice: Undefined offset: 7 in /home/PbiVDX/prog.php on line 16
PHP Notice: Undefined offset: 7 in /home/PbiVDX/prog.php on line 19
PHP Notice: Undefined offset: 9 in /home/PbiVDX/prog.php on line 20

Индексы 7 и 9 в массивах не существуют. Потому-что count(Массив) Возвращает колличество элементов в массиве, но не последний его индекс. Вот у нас допустим массив из трех элементов. Какой будет его последний индекс? 3? Нет, 2, потому-что отсчет начинается с нуля. Поэтому от count надо еще и отнимать 1. Смотри на ошибки внизу, это тебе поможет в будущем видеть в чем проблема и на какой конкретно строке.
#608 #452743
>>452742
http://ideone.com/pb66Ge
Вот так чели? Но ведь все равно это галимый говнокод у меня получился, ведь как-то рациональнее все можно сделать. Я правильно делаю, что начинаю отсчет с нулевого элемента в mt_rand?
#609 #452744
>>452743
Теперь все нормально.
45 Кб, 300x436
#610 #452746
>>452743
Можешь все свои массивы слов загнать в один многомерный массив и написать функцию, которая будет проходить по вложенным массивам и извлекать необходимое количество слов в нужный момент и ставить в нужное место. Вот тебе будет уже не говнокод, а интересное решение, заодно с функциями\циклами познакомишься.
мимо-хуй-полгода-стаж-пыхи
#611 #452754
втыкаю vkapi на php и не могу разобраться как выводить json возвращаемый функцией photos.get
объясните как разбирается этот объект из объектов?
#612 #452757
Спасайте ироды, copy ошалел. Нихуя не может копировать с www/data/images/1.jpg в www/data/images/2.jpg, правда везде 755. При этом спокойно копирует с www/data/images/3.jpg например. и 1.jpg и 3.jpg файлы существуют. Таким образом в совершенно одинаковых случаях это говно ведет себя по разному.
#613 #452758
>>452757

>права

#614 #452761
Выручайте, нуб снова здесь.
http://ideone.com/1aak06
Помогите мне присвоить значение $symbol1 и $symbol2 таким образом, чтобы символ1 сначала брал 1 символ в строке, а символ 2 брал последний символ в строке. Изломал свою чекалдушку, не хочу от такой формы записи уходить.
#615 #452763
>>452761

>$symbol2 = mb_substr($text2, $i, -1);


Там нужно -$i, а не минус 1.
Последняя цифра это сколько символов ты хочешь взять из строки, там не нужен минус. А там где переменная, это с какой позиции ты хочешь взять букву. Если она будет отрицательная, то буквы будут браться с конца.
#616 #452764
>>452763
я делал и -$i и пробовал (0-$i). Попробуй запустить скрипт - нихуя буквы не совпадают.
#617 #452765
>>452763
Почему-то 2 символ отстает на 1, не могу понять как это исправить
#618 #452766
>>452764
Не совпадают, потому-что на первом шаге минус ничего не делает (не может быть -0)
>>452765
Это же обычная арифметика. Если отстает на 1, значит нужно прибавить один.
#619 #452767
>>452763
Бля, я понял, что он возвращает сначала 1 элемент, потом последний, а они одинаковые. Как сделать так, чтобы он сразу вернул именно последний элемент. Выражение -1+$i - Хуета, не сработает
#620 #452769
>>452767
http://ideone.com/LN4j5o все работает, как видишь
#621 #452770
>>452769
Пиздец, я затупок, спасибо.
#622 #452772
>>452739
Можно использовать классы.
#623 #452775
>>452757
sudo -RF 777?
#624 #452777
>>452775
777 права тоже пытался ставить. Правда я это все не через консольку делаю.
#625 #452780
>>452754
json_decode?
print_r?
#626 #452787
>>452780
http://pastebin.com/M9Lgwfbc
http://pastebin.com/MeqEash2

не могу понять как его дальше разбирать?
как получить количество фото в альбоме(его нам сам вк считает)
и как вывести ссылки пакетами(там одно фото в разных размерах)
#628 #452797
>>452790
нее...
это я умею.
я не могу вывести количество.
и не могу вывести ссылки группами типа:
фото1 : перевивью
малая
большая
очень большая
огромная.
#629 #452799
>>452790
и чо за хуйня в в масcиве json?
#630 #452808
>>452799
Ето для примера.
#631 #452822
>>452797

>количество


echo(count(json_decode($json)->response));

>группами


Нахуя ты тупа полез, если не можешь в циклы?
Бля, ОП распинается, пытается вас чему то научить, но нет, будем жрать говно.
#632 #452823
ОП, помоги.
Башка раскалывается нахуй от твоей задачи.
http://ideone.com/mRQoZY
Направь меня, пожалуйста.
Если кто знает, это задача про ебучий айпад.
#633 #452838
>>452799

>масcиве json


Долбоеб, это json.
#634 #452856
>>452823
Ох, лол. Ты напомнил как я сам начинал и охеревал с этой задачи, а еще от моего разленившегося мозга, который не мог тукаю хуиту простую сделать с наскока. Чем помощь? Сначала набросай схему работы(что за чем, и когда, и если) программы, а потом лишь начинай описывать ее реализацию. Поверь, так сразу напишешь.
#635 #452872
>>452856
Я тоже думал о том, чтобы нарисовать схему какую-нибудь, сейчас попробую.
#636 #452877
>>452856
>>452872
А я всегда сначала на бумаге шаги изображаю.
#637 #452883
>>452877
Научи меня, как это сделать?
#638 #452884
>>452856
Дай мне подсказку, пожалуйста, как связать банки с функцией, я тупой похоже.
245 Кб, 960x720
#640 #452896
>>452884
Извини, но тебе не стоит этого делать. Сам не сделаешь - не научишься.
Реши задачу математически. Потом рисуй схему, где в манере развилок(гипертестов\вилок или как это назвать) выводи действия - типа : сделал действие1->сделал2-> повторил действие1 else действие2->действие1->действие3. Ну ты понел. В общем, не сдавайся, соберись, подумай, сделай перерыв на какое-нибудь развлечение и продолжай. Нельзя на начальном этапе пользовать готовыми решениями, это пагубно сказывается на усвоении информации. Главное алгоритм(скелет проги), потом уже реализация. Если есть алгоритм - написать вопрос вообще не стоит, ты ведь уже знаешь, что ты хочешь получить и когда. Добра.
#641 #452907
>>452896
Спасибо за совет.
Ебучий нуб опять на связи.
http://ideone.com/QRAk3Q
Мучал-мучал код, взгляните, ткните еблом меня, что не так делаю? В правильном направлении иду хотя бы?
#642 #452912
И аноны, научите меня, что нужно установить, чтобы я мог писать офлайн на пекарне. Скачал опен сервер, устанавливаю и нихуя не происходит.
#643 #452913
>>452912
Винда - openserver, denver
linux - apache2 + php + mysql
#644 #452914
Познакомился наконец-то с PDO до этого использовал mysqli, что то мне показалось что mysqli удобнее, особенно напрягают некоторые проблемы с использованием имени полей таблицы в запросе, с запросами вроде INSERT, UPDATE и другим, но как я понимаю надо использовать PDO, поясните, я ошибаюсь PDO на самом деле удобнее и я просто не всё понял? Мне как-то показалось что писать что то такое:

$field = "`".str_replace("`","``",$_GET['field'])."`";

Будет довольно напряжно
#645 #452920
>>452907
Бамп реквесту. Голова пока отдыхает, жду ваших советов.
#646 #452921
>>452907
И еще не знаю пока как провернуть операцию разовой комиссии 7777 рублей
67 Кб, 714x314
111 Кб, 592x462
#647 #452939
Еще одно затруднение постигло нуба. Установил я денвер, протестил: на локалхосте страницы хтмл открываются. Но когда я попытался по книге написать код, то не получил результат, который описывался в книге, пикрелейтед. Подскажите, что я не так сделал?
#648 #452941
>>452939
А какой получил?
#649 #452943
>>452921
$bankname = totalpay() + $razovaya_komissiya
24 Кб, 381x259
36 Кб, 1359x682
#650 #452945
>>452941
Вот мой код и результат.
#651 #452946
>>452943
Спасибо, анончик, точно.
#652 #452950
>>452945
Замени на

<?php

print('Hello, world!');
phpinfo();
77 Кб, 406x601
#653 #452951
И еще, раз тут такая пляска по книгам пошла, вот эта книжка подойдет для изучения? Понимаю, что по году она от современности отстает, но я в агнлийский пока плохо могу, чтобы читать в оригинале.
#654 #452952
>>452951
Нет не пойдет. Читни учебник опа для начала.
#655 #452953
>>452950
Никакой реакции
#656 #452955
>>452952
Почему не пойдет?
#657 #452956
>>452953
Создай php файл и пиши туда без html - только php
#658 #452958
>>452955
Устаревший подход к написанию кода. ООП вообще нету, все чисто на процедурках. Многие вещи придется переучивать. Я сам с этой книжки начинал, не сказал бы, что зря потратил время, полезным вещам тоже научился, но учебник ОПа + официальная документация реально будет полезнее.
#659 #452960
>>452958
А PHP5 в подлиннике Котерова?
#660 #452961
>>452960
Ничего сказать не могу насчет других книг, я читал только Никсона и Оповский учебник.
#661 #452962
http://rutracker.org/forum/viewtopic.php?t=4917138
По этим видеоурокам кто-то занимался? Хорошие?
#662 #452989
Можно как-нибудь проверять, что приходит в функцию?
Прочитал http://php.net/manual/ru/language.oop5.typehinting.php

И там написано что нельзя проверять на простые типы как: int, bool и так далее. А я как раз делаю конструктор сотрудника и хочу что бы туда сразу передавался его ранг в виде int и то, начальник он нет, в виде bool.

А еще вот такой затуп. Например у меня будет человек повышаться в ранге. Соответственно нужно делать 2 переменных под зарплату? Что бы в первой хранить зарплату по умолчанию для всех, а во второй хранить зарплату текущую, в зависимости от ранга?
#664 #452998
>>452990
Спасибо, пока отложу это. Нужно судя по этим функциям делать доп проверку внутри моей функции с их участием, а я хотел супер элегантно в духе:
function count(array $array) {
return count($array);
}

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

В общем как я понимаю родитель не знает о данных своих наследников? Могу я составить конструктор в родительском классе, и использовать в нем данные наследников?

И вот еще вопрос: Если у сотружников в зависимости от ранга или лидерства меняются параметры, то мне в конструкторе это дело по хардкору настраивать лучше? Или просто потом сделать функции которые будут это дело сразу высчитывать в процессе?
#665 #453000
>>452998

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


Вроде да, почему бы и нет?
#666 #453003
>>453000
Спасибо, вроде бы работает: http://ideone.com/jKnvgR
Оказывается просто тогда не должно быть в родительском классе таких же полей как в наследниках, тогда конструктор лезет сразу в поля наследника.
267 Кб, 974x2214
#667 #453008
Оп, не думаешь добавить в учебник что-нибудь про mvc, я вот так-то в общих чертах себе представлял что к чему, ну там все эти рисуночки с моделью-котроллером-вьюхой, отделение логики от штмл, звучало многообещающе. Начал углубляться и просто выпал в осадок. Такая дичь пошла... настраиваем .хтассесс, во всех примерах по-разному, при разных структурах папок все по-разному, 'тут мозги не парьте, копируйте и все', разбиваем урл, первый кусок будет классом, второй кусок будет методом, остальные куски будут параметрами. Крутые истории ваще, я к этому был не готов. И главное где в итоге отделение штмл я не увидел, так как эти вьюхи по сути классы с методами типа function output() {echo "<div></div>"}. Ну или посоветуй норм источник почитать.
#668 #453012
нужно простое веб-приложение которое будет формировать конфиг файл на основе настроек, задаваемых юзером через этот самый интерфейс. также не помешал бы какой-то встроенный механизм авторизации.
в общем, что-то вроде интерфейса настройки роутеров
авторизацию, думаю, сделаю через веб сервер, а вот по всему остальному куда копать?
#669 #453014
>>452962
За эти не знаю, но рекомендую на русракере поискать видеокурсы Специалист. они там были еще недавно, 20 гектар или коло того, но тебя интересует пыха, там 4 курса лекций бауманки, где для нубаса самый смак - вдумчиво и пережевывая подается док с пхп,нет. Есть лабы, я их делал по ходу, рекомендую делать. Сначал про процедурку и кодинг в целом, потом и к ооп подводят и идут по ооп. Я считаю что для нубаса очень годные курсы несмотря на дату выпуска. алсо, пока писал уже и загуглил - вот новый курс http://rutracker.org/forum/viewtopic.php?t=4620353 за 2013, не знаю не смотрел, ща качну гляну что там. А вот старый походу потерли, не могу найти.
31 Кб, 480x360
#670 #453018
>>452998
Ага, ты хоть пыхапэнет почитай чтоле. Это называется наследование, вызываешь через парент:: конструктор родителя, потом дописываешь хуиту наследника, ололо все работает. Ну, серьезно, начинай читать мануал, он годный, базарю.
#671 #453020
>>453008
О, а мне дико понравилось разбирать на лету урлки и собирать\вызывать контроллеры\экшены.
#672 #453034
>>453014
Спасибо, качну-гляну. Но, имхо, в курсах от Специалиста оче много воды, слишком уж сильно разжёвывают.
Был опыт, когда хтмл/цсс ковырял. На 4-м уроке моё терпение лопнуло и я скачал интенсив от хтмлакадеми.
#673 #453085
>>452945
Смени формат файла на .php
#674 #453087
Несколько вопросов к шарящим анонам:
Нормально знаю ООП, могу писать в этом стиле, понимаю принцип mvc (но особо не работал с ним), естественно все дифолтные задачи на выборки/добавление етс могу сделать на php+mysql, помимо этого знаю более менее js и jquery.
Но блять, заходя на фриланс сайты и пытаясь что-то там найти, я нахожу кучу проектов по доработке сайтов на джумле/вордпрессе (второе преобладает) + написание плагинов для них, и тут я в ступоре.
1) Как научиться делать эту парашу, что почитать? И насколько много потребуется времени, учитывая что знаю описанное выше?
2) Что больше всего я не могу понять -- допустим у чувака интернет магазин на какой-то cms-ке, у него там в корзине какие-то поля есть, он просит добавить, например, выбор цвета для товара/добавить новые поля/еще какая-то параша которая, как я понимаю, связана с работой с бд. Но как это сделать? Лезть в скрипт той же корзины, искать где там добавление товара в базу, предварительно добавлять в базу еще одно поле (если чуваку цвет нужен например), и добавлять? Это какой-то неебически-мазахисткий способ, можно сдохнуть. Анон, надеюсь я ошибаюсь и есть другие способы? Поясни, пожалуйста.
В целом вообще не понимаю, как работать с БД и вносить поправки в скрипты в этих ебаных CMS.

Алсо, если есть какой-то путь, что почитать/посмотреть, чтобы по итогам не задавать вопросы на дваче а уже самому ответить на вопросы выше -- подскажи, добрый анон. Заранее спасибо<3
#675 #453097
Есть тут работающие аноны с Новосиба? Кому-нибудь в контору нужен джуниор? Готов выкладываться по хардкору.
#676 #453118
>>453087
Так у тебя опыт работы реальной есть в какой-нибудь самой задрипанной конторе хотя бы? Имхо простейший способ начать зарабатывать на фрилансе - это устроиться куда-то джуном или хоть кем, поработать несколько месяцев, что бы руку набить, и после этого уже смотреть, можешь ли ты этим фрилансить. В любой конторе будет КАКОЙ-ТО КОНКРЕТНЫЙ СТЕК ТЕХНОЛОГИЙ если это натягиватели дизайна а джумлу или друпал, то ты прокачаешься там в этом, если ебашители на yii, simfony... ets, то в том. И далее ты просто ищешь на этом самом фрилансе, то что ты УЖЕ УМЕЕШЬ ну плюс минус какая-нибудь хуйня, которую можно в процессе освоить. В общем это лишь имхо теоретика, но так как сейчас у нас глубокая ночь и нас тут всего двое, то почему бы и не ответить.
#677 #453143
>>451163

>Ок, переходи ко второй задаче про вектор.



Вот, прошу оценить код третьей задачи на ООП.

http://ideone.com/jKnvgR

От копипасты постарался избавиться в зародыше: сначала у меня были одинаковые функции для подсчета кофе, зарплаты и документов для депертаментов и фирмы в целом - переделал в одну с пареметром. Надеюсь я правильно понял суть.
24 Кб, 739x440
#678 #453157
>>452822
так сервер вк из уже посчитал и вернул согласно документации...
вот как это значение получить?
#679 #453165
Нуб опять в треде. Сегодня на свежую голову сел писать задание, решил не смотреть, что у ОПа в учебнике на скриншоте, абстрагировался и написал вот эту хуету:

http://ideone.com/VvdK1k

Где я обосрался? Дайте какую-нибудь подсказку, пожалуйста. Я не прошу делать за меня.
#680 #453166
>>453165
Задача на ебучий айпад если что.
#681 #453167
>>452343
Градиент сверху отстой.
#682 #453170
>>453165
Вот такую еще ебалу сделал.

http://ideone.com/cVUMEs
#683 #453177
Это все тот же нуб на связи.
Я придумал, над каким проектом я буду работать пока буду изучать PHP. Я упарываюсь велосипедами и решил разработать сайт этой тематики: информация о всех велосипедах - новинках, моделях прошлого, информацией об аксессуарах и т.д. Прикинул стек, который мне для этого нужен: html, css, макет простенький набросать, php, JS, MySQL. Когда мне удастся с нуля запустить этот проект на хостинге, могу ли я расчитывать на получение работы джуном в ДС2 например?
#684 #453205
Ну помогите кто-нибудь нубу.
#685 #453206
>>453205
Чем помочь?
#686 #453209
Установил Yii2 через компосер из Open server'a встало без ошибок всё. Но теперь вопрос: в инструкции на гите написано, что после установки будет работать ссылка: http://localhost/basic/web/index.php, но, у меня папка basic не в domains/localhost, а в корне open servera, соответственно по такому адресу она не запускается. Что делать то? Не вручную же переносить в localhost?
#687 #453211
>>453206
http://ideone.com/cVUMEs

Задача на айпад школьнуку. Не могу понять, что делаю не так, где загвоздка в цикле.
#688 #453212
>>453206
Если что, задача лежит по этой ссылке:
http://archive-ipq-co.narod.ru/l1/functions.html
#689 #453213
>>453211
Так ты не решал предыдущую задачу про кредит? Зачем же перепрыгивать на более сложные задачи, не решив перед этим задачу попроще?
if($totalCredit < $monthPay){
\t\t\tbreak;
\t\t}
Бессмысленная конструкция. Если оставшийся кредит меньше ежемесячной выплаты мы просто прекращаем платить? Банк простит нам оставшийся долг? Что за переменная $total? Она вообще нигде не используется.
#690 #453216
>>453209
Попробовал снова установить изменив папку:
composer create-project --prefer-dist yiisoft/yii2-app-basic domains\localhost но выдает ошибку:
[InvalidArgumentException]
Project directory domains/localhost/ is not empty.
В интернете не хватает нормального гайда по установке yii на опенсервер.
#691 #453217
>>453213
Дело в том, что первую задачу я решил, вот она:

http://ideone.com/mnUebV

На ее основании попытался решить про айпад и ничего пока не вышло, второй день над ней сижу и уже ощущаю себя тупицей.
#692 #453219
>>453217
Она не правильно решена, так что можно сказать, что ты её не решил. Ты выкладывал её в тред? ОП бы тебе сказал, что тут решение не верное. У тебя должно получиться в конце 61 тысяча с чем-то.
#693 #453220
>>453213
а про остаток и платеж: я так понимаю, если цикл придет к значению $totalCredit < $monthPay, то анону нужно будет заплатить меньше 5к, именно поэтому я ввел эту строку. В первой задаче все работало, внимание рассеялось, не могу понять, в чем дело.
#694 #453222
>>453219
Я ща не поленюсь посчитать на бумаге и скажу тебе, правильно ли она решена.
#695 #453224
>>453220
Так код внутри функции в этой задаче ничем и не должен отличаться от кода в предыдущей задаче, можно тупо скопировать его внутрь функции. А у тебя вообще что-то не то, в первой задаче у тебя совсем другое тело в условии, а тут ты просто break написал и думаешь, что каким-то чудесным образом остаток сам себя выплатит.
>>453222
Тут каждую неделю по несколько анонов эту задачу выкладывает и у всех получается 59к, а нужно 61, я уже скоро наизусть выучу. Если ты не веришь мне, дождись ОПа.
#696 #453225
>>453224
1 - 37200
2 - 34316
3 - 31345.48
4 - 28285.8444
5 - 25134.419732
6 - 21888.45232396
7 - 18545.1058936788
8 - 15101.459070489164
9 - 11554.50284260383892
10 - 7901.1379278819540876
11 - 4138.172065718412710228

вот такая хуйня получилась, все действия считал вручную
#697 #453227
>>453224
Я так понял, ты из тех, кто не может дать подсказку и просто пиздит на новеньких. Буду ждать ОПа, от тебя ничего дельного не услышал.
#698 #453228
>>453224
Прости, напиздел на тебя. Воткнул ща в код про айпад код из айфона - все заработало. Понимаю, что он не эффективный. Ща отредактирую, скину сюда.
#699 #453229
>>453225
На последнем месяце 4138 просто добавляется к общей выплате, а должно быть, чтобы начислялся сервис пеймент и процент.
#700 #453232
>>453225
считай дальше.

12 - 262,3172276899644
13 - (-3729,813255479337)
#701 #453233
http://ideone.com/VvdK1k

ОП, два дня я мучил себе голову с этой задачей, посмотри на решение. Теперь я не могу понять, почему в ответе появляется писанина "7777" в конце? Укажи на мои ошибки, дай советы по оптимизации кода.
#702 #453236
>>453232
Точно, вот я мудила
#703 #453237
>>453224

>Тут каждую неделю по несколько анонов эту задачу выкладывает и у всех получается 59к, а нужно 61, я уже скоро наизусть выучу. Если ты не веришь мне, дождись ОПа.


А я не выкладывал, но у меня 61 было.
#704 #453238
ОП, нуб снова на связи.
Проверь две эти задачи:

http://ideone.com/mnUebV - айфон
http://ideone.com/VvdK1k - айпад

Где косяки? Кроме писанины предпоследнего месяца в айфонею
#705 #453239
>>453238
Вижу свою ошибку уже сразу:
7777 не прибавляется по методу, который мне посоветовал >>452943.
Пока не могу додумать, как прибавить разовую таксу.
#706 #453242
>>453239
Она прибавляется, поэтому у тебя в конце 7777 и пишет. Фишка в том, что сама функция ничего не возвращает и соответственно 777 к нулю прибавляется.
#707 #453245
>>453237
Какой я молодец.
#708 #453250
>>453239
А я бы изначально добавил в функцию $oneTimeTax, В случае если нет первоначального взноса было бы 0.
#709 #453251
>>453238
http://ideone.com/mnUebV

>Анон платит 13-й месяц. Заплатил уже 65000. Остаток задолженности -3729.8132554793.


>Анон платит 14-й месяц. Заплатил уже 61270.186744521. Остаток задолженности 0.



Так быть не должно. Не уходи в минус. Школьник же не переплачивает. Если нужно выплатить меньше 5000, так и плати меньше 5000. Ещё и 14ый месяц вылез откуда-то.

http://ideone.com/VvdK1k

Внизу сообщение об ошибке.

>PHP Notice: Undefined variable: total in /home/aqfQeg/prog.php on line 7.


Исправь её.
#710 #453254
Пасан дело говорит?
http://phpfaq.ru/pdo
#711 #453291
>>453143
Блин, весь день спал, а никто и не чекнул мою задачу за это время, ну посмотрите может быть хотя бы те кто уже решал и сечет в ООП, укажите на пару недочетов?
>>453165
Я тебе советую выводить echo для наглядности на каждой итерации цикла например, и нормально форматировать код, а то я сначала ничего не понял в твоей стене и хотел тебе указать что у тебя month++; дублируется с $month = $month+1; и только потом понял что это костыль внутри условия if() {}

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

http://ideone.com/5Q303W

Ну и у тебя неопределенная переменная, её нужно завести, перед тем как в неё что-то складывать, но это совсем мелочь.
#712 #453297
Ребят, почему тред затухает так сильно в выходные? Все бухают типа и гуляют? Один я как лох сижу на дваче?
#713 #453298
>>453297
Я тоже сижу. Может в выходные люди отдыхают от кодинга.
#714 #453306
>>453297
>>453298
И я сижу.
#715 #453313
>>453291
Да как не уходить в минус? Всегда в минус ухожу, теперь вернулся к задаче с айфоном...

http://ideone.com/6Wmp5F

Пока к такому коду пришел, но не могу допереть, как сделать так, чтобы он мне посчитал еще одну операцию платежа и не ушел в минус.
#716 #453314
>>453313
Проблема в формуле. Её надо переделать. Нельзя не уходить в минус, когда у тебя сначала отнимается ежемесячный платеж, а потом уже идет проверка оставшейся суммы кредита.
#717 #453317
>>453313
Касаемо айпада - вот такую хуйню наобезьянил:
http://ideone.com/ZFZAG8
#718 #453318
>>453238
http://ideone.com/VvdK1k

>for ($month = 1; $month <= 20; $month++) {


>$creditSum = ($creditSum * $bankPercent) + $tax - $monthPay;



Зачем каждый месяц к кредиту прибавлять первоначальный долг? Он же ПЕРВОНАЧАЛЬНЫЙ.
#719 #453319
>>453318
*долг -> взнос
#720 #453327
>>453318
Тебя тут не хватало. Прочти внимательно условие задачи.
http://ideone.com/ZFZAG8
Посмотри новую версию кода.
35 Кб, 801x201
27 Кб, 610x140
#721 #453329
Кротаны, где я накосячил в sql-запросе?
#722 #453334
>>453329
Всё, забудьте, я уже сам осознал свою тупость.
#723 #453335
>>453334
Что там было?
40 Кб, 735x220
#724 #453339
>>453335
Вот так правильно.
#725 #453358
>>453327
Всё верно, я обосрался. Буду внимательнее.

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

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

Опять же ошибка, что баланс уходит в минус.
#726 #453380
>>453143
Блин мне реально нужна критика перед тем как я кошкомашкам приступлю. Вангую что все подряд public это типа фейл?
#727 #453382
>>453380

>Вангую что все подряд public это типа фейл?


Для первой задачи простительно, в остальных да.
#728 #453411
>>453382
http://ideone.com/gesFwJ
ПРодолжаю старую песню пока, мне нужно разобраться для чего нужно ставить паблик, приват и протектед перед этим?
#729 #453418
>>453411
Ну как для чего? Чтобы нельзя было изменить случайно какое-нибудь свойство, чтобы они менялись только методами.
#730 #453435
Кстати ОП, ты так и не сказал мне как лечить >>451696
Так, ты еще говорил что тебе не нравятся константы в родительском классе Сотрудников, я завтра это исправлю.

Репост >>452193
ОП #731 #453446
Ох, аноны, сколько вы тут всего написали, я сейчас попробую всем ответить. Только мне еще в магазин надо съездить успеть будет.

>>453435

Ну как же так, мы же вроде разобрались тогда?

> Почему выдается ошибка о том что я вызываю функцию не к объекту, когда я обращаюсь именно к нему?



Посмотри на свой код:

$newLeader = reset($filteredEmployees);
$newLeader->setLeader(true);

Если filteredEmployees пустой массив то в newLeader будет false и разумеется ты не можшь к нему обратиться. Достаточно поставить var_dump($newLeader, $filteredEmployees) (не print_r) перед этими строчками чтобы это увидеть.
#732 #453447
>>453435

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


Мне не нравится когда родительский класс знает какие у него будут дети.

Предок ничего не должен знать о своих потомках. Он не должен обращаться к их методам, и не должен перечислять их список с помощью констант. Потому что ты сейчас, когда пишешь класс Employee не знаешь как он будет использоваться и кем. Может кто-то скачает твой код с гитхаба и подключит в себе проект и захочет добавить пару профессий. А констант для них в Employee нету.
#733 #453455
>>453254

> С тех пор, как тронувшиеся умом разработчики РНР решили запретить невинную библиотеку mysql,


Там была объективная причина: библиотека для работы с mysql использовала код, права на который по моему принадлежади Oracle. Соответственно эта корпорация могла бы тормозить ее развитие. Да и справедливости ради, ничего хорошего в ней не было, примитивная процедурная библиотека без ООП.

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

Автор по моему просто то ли не любит ООП то ли не вполне его осилил.

>У PDO свой собственный хитровыдуманный способ соединения, называемый DSN


Этот способ записать параметры соединения придуман не разработчиками PDO, он использовался много лет до этого в майкрософтовских, явовских библиотеках, в ODBC по моему тоже. Википруф: http://en.wikipedia.org/wiki/Data_source_name

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

> Поскольку практически КАЖДЫЙ мануал по PDO считает своим долгом продемонстрировать в корне неверный способ обработки исключений, я должен сделать специальное пояснение.


> ...


> Так вот, дети, запомните: так делать не надо НИКОГДА.


Абсолютно верно.

> Используя этот метод, всегда следует предпочесть bindValue()? поскольку поведение bindParam() не очевидно для новичков и будет приводить к проблемам.


Верно

> а в качестве краткой рекомендации посоветую применять fetch() в режиме FETCH_LAZY:


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

> PDO и оператор IN


Лучше не писать свой код как там написано, а использовать библиотеку поддерживающие массивы. например Doctrine DBAL.

> (или посмотреть, все-таки, в сторону SafeMysql, в которой этот, как и многие другие вопросы, решены просто и элегантно


Пиар своей библиотеки. Лучше наверно использовать более широкоизвестные библиотеки.

> Это можно сделать, если принять соглашение, по которому имена полей в форме будут соответствовать именам полей в таблице. Тогда эти имена можно будет перечислить только один раз (в целях защиты от подмены, о которой говорилось выше), и использовать небольшую функцию-хелпер для сборки запроса, которая, в силу особенностей mysql, годится как для INSERT, так и UPDATE запросов:



Автор не удержался и начал придумывать свои странные велосипеды. Не стоит привязывать функцию работы с БД к функции сбора данных из POST и смешивать это вместе. Это плохо.

> $allowed = array("name","surname","email"); // allowed fields


> $sql = "INSERT INTO users SET ".pdoSet($fields,$values);


Заметим что массив allowed нигде в коде не используется. Опечатка или ошибка где-то в этом коде наверно.

Ну и как я написал выше, функция pdoSet как раз плохой пример так как смешивает работу с POST и с базой данных.

Так что в общем все верно, но те места где автор предлагает свой код и свою библиотеку, лучше пропустить.
#733 #453455
>>453254

> С тех пор, как тронувшиеся умом разработчики РНР решили запретить невинную библиотеку mysql,


Там была объективная причина: библиотека для работы с mysql использовала код, права на который по моему принадлежади Oracle. Соответственно эта корпорация могла бы тормозить ее развитие. Да и справедливости ради, ничего хорошего в ней не было, примитивная процедурная библиотека без ООП.

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

Автор по моему просто то ли не любит ООП то ли не вполне его осилил.

>У PDO свой собственный хитровыдуманный способ соединения, называемый DSN


Этот способ записать параметры соединения придуман не разработчиками PDO, он использовался много лет до этого в майкрософтовских, явовских библиотеках, в ODBC по моему тоже. Википруф: http://en.wikipedia.org/wiki/Data_source_name

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

> Поскольку практически КАЖДЫЙ мануал по PDO считает своим долгом продемонстрировать в корне неверный способ обработки исключений, я должен сделать специальное пояснение.


> ...


> Так вот, дети, запомните: так делать не надо НИКОГДА.


Абсолютно верно.

> Используя этот метод, всегда следует предпочесть bindValue()? поскольку поведение bindParam() не очевидно для новичков и будет приводить к проблемам.


Верно

> а в качестве краткой рекомендации посоветую применять fetch() в режиме FETCH_LAZY:


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

> PDO и оператор IN


Лучше не писать свой код как там написано, а использовать библиотеку поддерживающие массивы. например Doctrine DBAL.

> (или посмотреть, все-таки, в сторону SafeMysql, в которой этот, как и многие другие вопросы, решены просто и элегантно


Пиар своей библиотеки. Лучше наверно использовать более широкоизвестные библиотеки.

> Это можно сделать, если принять соглашение, по которому имена полей в форме будут соответствовать именам полей в таблице. Тогда эти имена можно будет перечислить только один раз (в целях защиты от подмены, о которой говорилось выше), и использовать небольшую функцию-хелпер для сборки запроса, которая, в силу особенностей mysql, годится как для INSERT, так и UPDATE запросов:



Автор не удержался и начал придумывать свои странные велосипеды. Не стоит привязывать функцию работы с БД к функции сбора данных из POST и смешивать это вместе. Это плохо.

> $allowed = array("name","surname","email"); // allowed fields


> $sql = "INSERT INTO users SET ".pdoSet($fields,$values);


Заметим что массив allowed нигде в коде не используется. Опечатка или ошибка где-то в этом коде наверно.

Ну и как я написал выше, функция pdoSet как раз плохой пример так как смешивает работу с POST и с базой данных.

Так что в общем все верно, но те места где автор предлагает свой код и свою библиотеку, лучше пропустить.
#734 #453461
>>452540

Если ты не освоил гитхаб, загружай на gist.github.com, там работает перетаскивание и по моему можно даже анонимно грузить. Там код смотреть удобнее и быстрее чем скачивать архивы и распаковывать.

HTML валидатор http://validator.w3.org/ показывает 13 ошибок в HTML коде. Очень жаль, что ты не проверил свой код перед тем как мне его отправить, хотя я просил проверить.

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

CSS валидатор https://jigsaw.w3.org/css-validator/ показывает одну ошибку, в коде от Font Squirrel. Если заключить содержимое url()

src: url(data:application/x-font-woff;

в одиночные кавычки, ошибки не будет.
#735 #453462
>>453461
Там alt для картинок не указан и что-то со шрифтами, которые я вставил, ну альт я могу добавить, а шрифты я вставил с гугл фонтса и другого сайта, который ты мне посоветовал.
#736 #453466
>>452569

Репостну: анон ищет

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



>>452596

Исправь замечания которые показывает валидатор HTML либо объясни почему необходимо отступить от стандарта:

http://validator.w3.org

Если что-то непонятно, пиши, я поясню.

>>452725

Все решено правильно, упрощать ничего не надо.

>>452739

> Таких как я, наверное, называют говнокодер и пхп макака.


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

В твоем случае код работает и хорошо. Чуть-чуть упростить можно за счет функции array_rand, подробности в мануале.

Перменные можно было просто назвать $word1, $word2, или что умнее, сложить в массив:

$words[0] = ...
$words[1] = ...

Всегда когда ты видищь переменные с цифрами, задумайся, не лучше ли использовать массив?
#736 #453466
>>452569

Репостну: анон ищет

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



>>452596

Исправь замечания которые показывает валидатор HTML либо объясни почему необходимо отступить от стандарта:

http://validator.w3.org

Если что-то непонятно, пиши, я поясню.

>>452725

Все решено правильно, упрощать ничего не надо.

>>452739

> Таких как я, наверное, называют говнокодер и пхп макака.


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

В твоем случае код работает и хорошо. Чуть-чуть упростить можно за счет функции array_rand, подробности в мануале.

Перменные можно было просто назвать $word1, $word2, или что умнее, сложить в массив:

$words[0] = ...
$words[1] = ...

Всегда когда ты видищь переменные с цифрами, задумайся, не лучше ли использовать массив?
#737 #453467
>>452757

Отображение ошибок включено? В этом случае при ошбках php выведет сообщение.

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

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

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

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

>>452766

Не знаю даже, огорчишься ты или обрадуешься, но в компьютерной арифметике есть +0 и -0 (а также бесеконечность которая в PHP обозначается как INF и не-число NaN): http://habrahabr.ru/post/112953/

> Зачем нулю знак (или +0 vs -0)



> Любознательный читатель вероятно уже замелил заметил, что в описанном представлении чисел с плавающей запятой существует два нуля, которые отличаются только знаком. Так, 3·(+0)=+0, а 3·(-0)=-0. Но при сравнении +0=-0. В стандарте знак сохранили умышленно, чтобы выражения, которые в результате переполнения или потери значимости превращаются в бесконечность или в ноль, при умножении и делении все же могли представить максимально корректный результат. Например, если бы у нуля не было знака, выражение 1/(1/x)=x не выполнялось бы верно при x=±∞, так как 1/∞ и 1/-∞ равны 0.



Так как при сравнении -0 должен равняться +0, то это не вызвыает проблем. Я ни разу в жизни не видел ни одного бага из-за этого.
#738 #453469
>>453461
https://gist.github.com/MindiMakridi/51ad14e55f261467f918
Тут же только код можно выкладывать, файлами по моему нагляднее.
#739 #453472
>>452772

думаю для такой простой задачи это лишнее.

>>452797
>>453157

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

Также изучи внимательно документацию по json decode: http://php.net/manual/ru/function.json-decode.php

>>452823

А ты решал более простую задачу про айфон и один банк? Если да то надо просто завернуть код решения в фунцию. Если нет то реши сначала про айфон.
#740 #453474
>>452838

Только давай без ругательств.

>>452883

Тебе надо решить сначала задачу про айфон.

>>452907

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

В твоем случае у тебя нет проверки чему равен долг. Если долг маленлкьй надо платиь не 5000 а сколько осталось. Если долг дошел до нуля то платить больше не надо.

>>452912

Для начала, возьми эту инструкцию и научись запускать код в консоли: https://gist.github.com/codedokode/7054af4a03865c4cc863 (устанавливать сам php не надо если он у тебя уже есть)

Вот гайд по командной строке: https://gist.github.com/codedokode/10539568

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

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

Под виндой в консоли не заработают русские буквы в utf-8.
#740 #453474
>>452838

Только давай без ругательств.

>>452883

Тебе надо решить сначала задачу про айфон.

>>452907

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

В твоем случае у тебя нет проверки чему равен долг. Если долг маленлкьй надо платиь не 5000 а сколько осталось. Если долг дошел до нуля то платить больше не надо.

>>452912

Для начала, возьми эту инструкцию и научись запускать код в консоли: https://gist.github.com/codedokode/7054af4a03865c4cc863 (устанавливать сам php не надо если он у тебя уже есть)

Вот гайд по командной строке: https://gist.github.com/codedokode/10539568

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

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

Под виндой в консоли не заработают русские буквы в utf-8.
#741 #453475
>>452913

лучше ставить самому. openserver для опытных программистов. denver вообще что-то устаревшее по моему.

>>452914

> поясните, я ошибаюсь PDO на самом деле удобнее и я просто не всё понял?


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

> Мне как-то показалось что писать что то такое:


> Будет довольно напряжно


Пиши нормальный запрос вроде

$stmt = $pdo->prepare('INSERT INTO t (a, b, c) VALUES (:a, :b, :c)');
#742 #453477
>>452939

Покажи свой код и что выводит браузер (нажми Ctrl + U в браузере чтобы увидеть исходный код.)

>>452945

Как файл называется? php установлен? Что браузер покажет если нажать Ctrl + U (исходный код страницы)

Вместо <? надо писать <?php

Книга по которой ты учишься очень старая. PHP 4 был 10 лет назад.
#743 #453478
>>452951

Она старая и там довольно плохие примеры кода.

>>453014

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


Но не быстрее и не проще ли прочитать самому эту документацию? Ну и мое мнение, начинающему равновато браться за сложные вещи вроде двоичной арифметики (& | ^). Эти темы надо изучать отдельно с разброром что такое довичные числа, биты и т.д.

>>452989

> Можно как-нибудь проверять, что приходит в функцию?


> А я как раз делаю конструктор сотрудника и хочу что бы туда сразу передавался его ранг в виде int и то, начальник он нет, в виде bool.



Можно через ифы:

if (!is_numeric($rank) || $rank < 1 || $rank > 3) {
throw new ArgumentException("rank must be a number, '$rank' given");
}

Можно через assert:

assert(is_numeric($rank));
assert($rank >= 1);
assert($rank <= 3);

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

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


Можно хранить только базовую ставку которая никогда не меняется, а зарплату не хранить нигде.
#743 #453478
>>452951

Она старая и там довольно плохие примеры кода.

>>453014

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


Но не быстрее и не проще ли прочитать самому эту документацию? Ну и мое мнение, начинающему равновато браться за сложные вещи вроде двоичной арифметики (& | ^). Эти темы надо изучать отдельно с разброром что такое довичные числа, биты и т.д.

>>452989

> Можно как-нибудь проверять, что приходит в функцию?


> А я как раз делаю конструктор сотрудника и хочу что бы туда сразу передавался его ранг в виде int и то, начальник он нет, в виде bool.



Можно через ифы:

if (!is_numeric($rank) || $rank < 1 || $rank > 3) {
throw new ArgumentException("rank must be a number, '$rank' given");
}

Можно через assert:

assert(is_numeric($rank));
assert($rank >= 1);
assert($rank <= 3);

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

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


Можно хранить только базовую ставку которая никогда не меняется, а зарплату не хранить нигде.
#744 #453480
>>452990

Еще есть is_numeric которая принимает строки-числа вроде '1'. Хотя не факт что это хорошо конечно.

>>452998

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


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

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


Ты можешь обращаться только к тем полям и методам которые есть в родительском классе. Но ты можешь объявить поле или метод в родителе и переопределить в наследнике — это допустимо. Опять же вспомни что кто-то может унаследовать твой класс в будущем.

> Если у сотружников в зависимости от ранга или лидерства меняются параметры, то мне в конструкторе это дело по хардкору настраивать лучше?


лучше не хранить такие параметры нигде.

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


да

>>453003

> $this->salary = $this->defaultSalary $rankBonus $leaderBonus;


Ты не должен обращаться к полям которые появятся только в начледнике. Это неправильно так как если кто-то унаследует твой класс и не объявит там поле то код сломается.
#745 #453482
>>453008

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

Вот тут есть краткое объяснение https://github.com/codedokode/pasta/blob/master/student-list.md#mvc

> И главное где в итоге отделение штмл я не увидел, так как эти вьюхи по сути классы с методами типа function output() {echo "<div></div>"}



Обычно вьюха это шаблон без классов в нем. Как тут http://www.phpinfo.su/articles/practice/shablony_v_php.html

> Ну или посоветуй норм источник почитать.


не знаю, погугли на хабре например

> тут мозги не парьте, копируйте и все


это плохой учебник если не объясняет

Вообще htaccess это файл задающий настройки веб-сервера. Там обычно используется mod_rewrite - это модуль который позволяет задать какой php файл мы вызываем при обращении по оределенному URL. Ну например при обращении по URL

/news/12

вызывать файл news.php

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


Это не обязательно. делать можно так как удобнее. Например в /news/12 news это название раздела а 12 это id новости.

Я могу ответить на уточняющие вопросы.
#745 #453482
>>453008

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

Вот тут есть краткое объяснение https://github.com/codedokode/pasta/blob/master/student-list.md#mvc

> И главное где в итоге отделение штмл я не увидел, так как эти вьюхи по сути классы с методами типа function output() {echo "<div></div>"}



Обычно вьюха это шаблон без классов в нем. Как тут http://www.phpinfo.su/articles/practice/shablony_v_php.html

> Ну или посоветуй норм источник почитать.


не знаю, погугли на хабре например

> тут мозги не парьте, копируйте и все


это плохой учебник если не объясняет

Вообще htaccess это файл задающий настройки веб-сервера. Там обычно используется mod_rewrite - это модуль который позволяет задать какой php файл мы вызываем при обращении по оределенному URL. Ну например при обращении по URL

/news/12

вызывать файл news.php

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


Это не обязательно. делать можно так как удобнее. Например в /news/12 news это название раздела а 12 это id новости.

Я могу ответить на уточняющие вопросы.
#746 #453483
>>453012

ЧТо ты умеешь и знаешь, а что нет? PHP знаешь? Писать скрипты выполняющиеся на сервере через браузер умеешь?

>>453469

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

http://git-scm.com/book/ru/v1
#747 #453484
>>453462

> ну альт я могу добавить,


добавь

> а шрифты я вставил с гугл фонтса и другого сайта,


Там ошибка в том что & это спецсимвол и его надо вписывать как &amp; в тексте и атрибутах. Эти 3 символа

< > &

надо вставлять через HTML мнемоники и верстальщик должен это знать.
#749 #453486
>>453411

> для чего нужно ставить паблик, приват и протектед перед этим?


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

То есть класс получается как закрытая коробка: ты можешь нажимать на оставленные автором кнопки (методы) но не можешь залезть внутрь.
#750 #453487
>>453297

ОП устал, лег спать и проспал часов 14 наверно в сумме. ну и пока прибирался, мылся, завтракал еще несколько часов прошло.

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


Я бы не сказал что затухает. Просто сейчас мы в бамплимите и меньше людей заходит.
#751 #453489
>>453222

используй excel/openoffice/google drive лучше, ты ж программист! Серьезно, иметь компьютер и считать на бумажке!

>>453219

да, 61270 по моему

>>453225

А надо было в екселе, тогда было бы легко поменять сумму

Также вот тебе еще пара примеров более простых:

берем 1000 отдаем 2030
берем 4000 отдаем 6120

Проверь что твоя программа так и считает.

>>453224

да, у всех получается 59 k потому что они неправильно считают а должно быть 61.
#752 #453492
>>453480
Ура, наконец-то ты дошел и до моей задачи. Это единственное замечание?

>Ты не должен обращаться к полям которые появятся только в начледнике. Это неправильно так как если кто-то унаследует твой класс и не объявит там поле то код сломается.



Я голову ломал как сделать так, что бы 1 раз грамотно сделать эту функцию, и не копипастить её для каждого класса. В таком случае мне нужно просто родителю добавить это поле? Или мне нужно для каждого наследника в таком случае одинаковый метод вводить??
#753 #453494
>>453480
я добавил классу $employee поле \tpublic $defaultSalary;
вроде бы ничего не сломалось, нормальное решение?
#754 #453503
ОП похоже пилит новый тред уже, чем тут отвечать.
#755 #453509
аноны, поясните за callback-функции. не могу найти нормального объяснения в интернетах. для чего нужны, как работают?
#756 #453529
>>453503

Нет. Я сначала отвечу всем кому еще не ответил.

>>453492

Нет, не единственное. Исправь пока это.

>>453494

да.
#757 #453536
>>453020

Только делать это лучше не руками, а используя микрофреймвокр вроде Slim/Silex или библиотеку-роутер.

>>453087

> я нахожу кучу проектов по доработке сайтов на джумле/вордпрессе (второе преобладает) + написание плагинов для них, и тут я в ступоре.


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

Собственно, чтобы их осввоить, достаточно прочесть мануалы с оф. сайтов. Пользовательский мануал раскажет как пользоваться админкой, а мануал для разработчиков (designer docs) расскажет как натянуть верстку и может написать плагин. Документация наверно на английском, но у вордпресса что-то есть в русском переводе. Их освоение у тебя максимум неделю займет. Ну и еще надо найти самые популярные плагины к ним и запомнить для чего они нужны.

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

> допустим у чувака интернет магазин на какой-то cms-ке, у него там в корзине какие-то поля есть, он просит добавить, например, выбор цвета для товара/добавить новые поля/еще какая-то параша которая, как я понимаю, связана с работой с бд. Но как это сделать?



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

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


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

> В целом вообще не понимаю, как работать с БД и вносить поправки в скрипты в этих ебаных CMS.


Работать с Бд через функции API. Вот например в вордпрессе есть $wpdb:

https://codex.wordpress.org/Class_Reference/ru:wpdb_Class

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

http://codex.wordpress.org/Plugin_API/Hooks
http://habrahabr.ru/post/67680/

Я бы тебе конечно советовал осваивать нормальные фреймворки вроде Symfony 2 или Yii2. на них правда заказов меньше но там ты будешь более менее с адекватным кодом работать.
#757 #453536
>>453020

Только делать это лучше не руками, а используя микрофреймвокр вроде Slim/Silex или библиотеку-роутер.

>>453087

> я нахожу кучу проектов по доработке сайтов на джумле/вордпрессе (второе преобладает) + написание плагинов для них, и тут я в ступоре.


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

Собственно, чтобы их осввоить, достаточно прочесть мануалы с оф. сайтов. Пользовательский мануал раскажет как пользоваться админкой, а мануал для разработчиков (designer docs) расскажет как натянуть верстку и может написать плагин. Документация наверно на английском, но у вордпресса что-то есть в русском переводе. Их освоение у тебя максимум неделю займет. Ну и еще надо найти самые популярные плагины к ним и запомнить для чего они нужны.

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

> допустим у чувака интернет магазин на какой-то cms-ке, у него там в корзине какие-то поля есть, он просит добавить, например, выбор цвета для товара/добавить новые поля/еще какая-то параша которая, как я понимаю, связана с работой с бд. Но как это сделать?



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

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


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

> В целом вообще не понимаю, как работать с БД и вносить поправки в скрипты в этих ебаных CMS.


Работать с Бд через функции API. Вот например в вордпрессе есть $wpdb:

https://codex.wordpress.org/Class_Reference/ru:wpdb_Class

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

http://codex.wordpress.org/Plugin_API/Hooks
http://habrahabr.ru/post/67680/

Я бы тебе конечно советовал осваивать нормальные фреймворки вроде Symfony 2 или Yii2. на них правда заказов меньше но там ты будешь более менее с адекватным кодом работать.
#758 #453544
>>453087

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

>>453143

> public function addWorkers($amount, $class, $rank, $leader) {


>\t\tfor($i=1; $i<=$amount; $i++ ) {


>\t\t\t$this->workers[] = new $class($rank, $leader);


Это лучше вынести из департамента. А то у тебя нельзя просто создать объект работника и добавить в департамент. Лучше сделать функцию вида

addEmployee(Employee $employee)

> $totalDepStuff += $worker->$stuff;


Тут конечно лучше бы было сделать несколько функций, или хотя бы константы для вида статистики и условие вида:

if ($stuff == Department::STAT_SALARY) {
$total += $worker->getSalary( );
}

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

> public function setSalary ()


Функция в предке не должна обращаться к полям (defaultSalary) которых нет в предке.

Также я бы советовал не хранить поле salary вообще. Ведь в твоем примере тебе надо как-то отследживать смену ранга/статуса босса и пересчитывать зарплату. Зачем усложнять себе жизнь?

> $spases = str_repeat(" ", ($length - $strLength - 1));


Здесь надо бы проверять чтобы не получилось отрицательное число.

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

> Задание: напиши программу для учета расходов и результатов работы всего дружного коддектива компании «Вектор».



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



> 1. Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.



> 2. Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров. В тех департаментах, где руководитель не является аналитиком, заменить его на аналитика самого высшего ранга из этого департамента (а бывшего руководителя вернуть к обычной работе)



> 3. В каждом департаменте повысить 50% (округляя в большую сторону) менеджеров 1-го и 2-го ранга на один ранг с целью расширить их полномочия.



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



Также, если бы ты поменял поля на закрытые (protected/private), было бы неплохо. Но это не обязательно.
#758 #453544
>>453087

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

>>453143

> public function addWorkers($amount, $class, $rank, $leader) {


>\t\tfor($i=1; $i<=$amount; $i++ ) {


>\t\t\t$this->workers[] = new $class($rank, $leader);


Это лучше вынести из департамента. А то у тебя нельзя просто создать объект работника и добавить в департамент. Лучше сделать функцию вида

addEmployee(Employee $employee)

> $totalDepStuff += $worker->$stuff;


Тут конечно лучше бы было сделать несколько функций, или хотя бы константы для вида статистики и условие вида:

if ($stuff == Department::STAT_SALARY) {
$total += $worker->getSalary( );
}

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

> public function setSalary ()


Функция в предке не должна обращаться к полям (defaultSalary) которых нет в предке.

Также я бы советовал не хранить поле salary вообще. Ведь в твоем примере тебе надо как-то отследживать смену ранга/статуса босса и пересчитывать зарплату. Зачем усложнять себе жизнь?

> $spases = str_repeat(" ", ($length - $strLength - 1));


Здесь надо бы проверять чтобы не получилось отрицательное число.

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

> Задание: напиши программу для учета расходов и результатов работы всего дружного коддектива компании «Вектор».



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



> 1. Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.



> 2. Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров. В тех департаментах, где руководитель не является аналитиком, заменить его на аналитика самого высшего ранга из этого департамента (а бывшего руководителя вернуть к обычной работе)



> 3. В каждом департаменте повысить 50% (округляя в большую сторону) менеджеров 1-го и 2-го ранга на один ранг с целью расширить их полномочия.



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



Также, если бы ты поменял поля на закрытые (protected/private), было бы неплохо. Но это не обязательно.
#759 #453553
>>453165

Посмотри там внизу ошибка, ты обращаешься к несуществующей еще переменной:

> PHP Notice: Undefined variable: total in /home/aqfQeg/prog.php on line 7



Это надо исправить.

> if ($creditSum < 0) {


Лучше бы сделать без ухода в минус.

Если подставить сумму 999 то считает неправильно: http://ideone.com/omeFCw

> Анон платит 2 месяцев. Заплатит 2028.97 банку SOFTBANK.


Не 2 месяца, а 1.

> $homoCredit = totalPay(...)


какой смысл это писать если у тебя в функци нет return и она всегда возвращает null?

Ну и код будет лучше если функция не будет ничего выводить, а только возвращать цифры через return. А тот, кто ее вызывал, уже сам выведет результат как ему нравится.
#760 #453557
>>453167

В заголовке окошка? да, слишком резкий какой-то и текст плохо читается.

>>453170

> brea


Не дописал

>>453177

> Прикинул стек, который мне для этого нужен:


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

> могу ли я расчитывать на получение работы джуном в ДС2 например?


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

>>453209

> но, у меня папка basic не в domains/localhost, а в корне open servera,


зря

> Не вручную же переносить в localhost?


Можно удалить все и установить заново в правильную папку.

>>453211

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

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

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

>>453216

> Project directory domains/localhost/ is not empty.


папка должна быть пустой

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


А опенсервер чем-то отличается от Апача + php что ему нужен особый гайд?

Задавай мне вопросы, я постараюсь ответить. ТОлько не забывай писать что ты сделал и что вывелось.
#760 #453557
>>453167

В заголовке окошка? да, слишком резкий какой-то и текст плохо читается.

>>453170

> brea


Не дописал

>>453177

> Прикинул стек, который мне для этого нужен:


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

> могу ли я расчитывать на получение работы джуном в ДС2 например?


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

>>453209

> но, у меня папка basic не в domains/localhost, а в корне open servera,


зря

> Не вручную же переносить в localhost?


Можно удалить все и установить заново в правильную папку.

>>453211

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

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

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

>>453216

> Project directory domains/localhost/ is not empty.


папка должна быть пустой

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


А опенсервер чем-то отличается от Апача + php что ему нужен особый гайд?

Задавай мне вопросы, я постараюсь ответить. ТОлько не забывай писать что ты сделал и что вывелось.
#761 #453561
>>453217

> Анон платит 13-й месяц. Заплатил уже 65000. Остаток задолженности -3729.8132554793.


Лучше в минус не уходить, а то странно смотрится.

>>453220

> , если цикл придет к значению $totalCredit < $monthPay, то анону нужно будет заплатить меньше 5к, именно поэтому я ввел эту строку.


Да но проверять это надо после добавления процентов и комиссии, а не до.

>>453227

Насчет 61к он прав.

>>453233

> $strawberryBank = totalPay(5000, 0, 39999, 1.02, 'STRAWBERRYBANK') + $oneTimeTax;


Функция возвращает null и получается

$stb = null + 7777; // = 7777

Ниже это выводится через echo.

>>453238

> Анон платит 13-й месяц. Заплатил уже 65000. Остаток задолженности -3729.8132554793.


Как может быть отрицательный долг? Школьник что ли переплатил и теперь банк ему должен? Так не должно быть.

Если подставить кредит = 1000 то пишет что отдавать его 2 месяца, а это неверно: http://ideone.com/yC5lX8

Должно быть 1 месяц.

>>453239

7777 надо прибавлять до начала расчета, а не после. а то на них проценты не начисляются.

>>453291

> а никто и не чекнул мою задачу за это время,


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

>>453317

> PHP Notice: Undefined variable: total in /home/nz8lPL/prog.php on line 10


Эту ошибку надо исправить. ну и в минус лучше не уходить. лучше не платить всегда ровно 5000 а смотреть сначала чему равен долг.

>>453411

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

>>453435

> Я в каждой конкретной специальности прописал в параметрах необходимые значения зарплаты, кофе и документов. И в файле создания департаментов (department.php) изменил добавления сотрудников. А при выводе почему-то все эти значения остаются пустыми.



Я же написал тут >>452196 — это из-за private
#761 #453561
>>453217

> Анон платит 13-й месяц. Заплатил уже 65000. Остаток задолженности -3729.8132554793.


Лучше в минус не уходить, а то странно смотрится.

>>453220

> , если цикл придет к значению $totalCredit < $monthPay, то анону нужно будет заплатить меньше 5к, именно поэтому я ввел эту строку.


Да но проверять это надо после добавления процентов и комиссии, а не до.

>>453227

Насчет 61к он прав.

>>453233

> $strawberryBank = totalPay(5000, 0, 39999, 1.02, 'STRAWBERRYBANK') + $oneTimeTax;


Функция возвращает null и получается

$stb = null + 7777; // = 7777

Ниже это выводится через echo.

>>453238

> Анон платит 13-й месяц. Заплатил уже 65000. Остаток задолженности -3729.8132554793.


Как может быть отрицательный долг? Школьник что ли переплатил и теперь банк ему должен? Так не должно быть.

Если подставить кредит = 1000 то пишет что отдавать его 2 месяца, а это неверно: http://ideone.com/yC5lX8

Должно быть 1 месяц.

>>453239

7777 надо прибавлять до начала расчета, а не после. а то на них проценты не начисляются.

>>453291

> а никто и не чекнул мою задачу за это время,


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

>>453317

> PHP Notice: Undefined variable: total in /home/nz8lPL/prog.php on line 10


Эту ошибку надо исправить. ну и в минус лучше не уходить. лучше не платить всегда ровно 5000 а смотреть сначала чему равен долг.

>>453411

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

>>453435

> Я в каждой конкретной специальности прописал в параметрах необходимые значения зарплаты, кофе и документов. И в файле создания департаментов (department.php) изменил добавления сотрудников. А при выводе почему-то все эти значения остаются пустыми.



Я же написал тут >>452196 — это из-за private
#762 #453562
>>453509

callback функция (функция обратного вызова) это когда ты передаешь в функцию другую функцию, и та ее вызывает. Они используются например в таких функциях как:

usort: http://php.net/manual/ru/function.usort.php
preg_replace_callback: http://php.net/manual/ru/function.preg-replace-callback.php
array_filter: http://php.net/manual/en/function.array-filter.php
array_map: http://php.net/manual/en/function.array-map.php
3342 Кб, 1224x672
#763 #453584
>>453485

Пока довольно слабо сделано и много чего надо исправить.

> <div id="webpaint"><a class="logo" href="">ebpaint</a></div>


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

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

Ну и не придется шрифт подключать ради 7 букв.

Буква W в логотипе не кликабельна. Буква W неправильно выровнена относительно букв ebpaint по вертикали, а сами буквы крупнее чем на макете.

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

Слева от заголовка белая вертикальная полоса.

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

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

Мне кажется тут реально минимальную ширину сделать 1111px (по ширине портфолио). А в надписи branding agency вместо br сделать автоматический перенос строки.

Размер текста

> We are Webpaint


> digital&branding agency based



Больше чем на макете. Сам текст должен быть сделан более тонким/легким (не 400) шрифтом.

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

Ты возможно напутал с размером текста из-за использования pt. В фотошопе (как и в типографике) пункт это по моему 1/72 дюйма и число в пикселях рассчитывается через указанное в документе разрешение (dpi). В общем я не уверен но скорее всего если в фотошопе текст имеет размер 16pt то в css это 16px.

В CSS pt это 1.25 пикселя. Ты можешь прочесть в стандартах определение про 1/72 дюйма, но я ни разу такого не видел на практике. Может быть при печати это так, не знаю.

Почитай:

http://www.w3.org/Style/Examples/007/units.ru.html (тут перевод странный)
http://css-live.ru/articles/novye-i-starye-edinicy-izmereniya-kratkij-obzor.html

Заметь что там довольно сложное определение пикселя. Это связано с появлением ретина-экранов. Раньше 1 css пиксель всегда соответстовал 1 пикселю на экране, но с ретиной все бы стало слишком мелким, и им пришлось придумать более хитроумное определение (в итоге на ретине 1 css пиксель отображается как 2×2 пикселя).

Единицы измерения вроде mm, cm, in предназначены в первую очередь для печати на бумаге. На экране удобнее использовать px и em когда мы хотим привязаться к размеру шрифта.

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

На кнопке See portfolio сама кнопка не кликабельна, только текст.

На иконке часов (Elit Ultricies) я вижу артефакты сжатия JPEG, ты ее не из джипега вырезал? Также, часы выводятся чуть обрезанными слева. Верстальщик должен видеть такие вещи.

Фотоаппарат как-то некачественно обрезан, если посмотреть картинку /images/services.png то видны следы ластика. Ты не умеешь в фотошопе отключать фоновый слой? Это плохо конечно. Лучше отключить фон и скопировать иконку на прозрачном фоне чем руками пытаться его удалить.В фотошопе alt + клик по «глазу» на слое оставляет видимым только этот слой (а правый клик инстурментом Rectangular Marquee показывает список слоев под текущей точкой).

Надписи SEE PORTFOLIO, GRAPHIC надо сделать нормальными, а капс лок сделать через CSS.

> checked="checked"


В HTML можно писать просто checked

> <a href="" class="navigation" id="active">


active лучше сделать классом, id обычно обозначает конкретный элемент.

> pbutton


Я бы советовал давать более читаемые и понятные названия. portfolio-button например.

> <div class="spritecontainer" id="android"></div>


Фоновую картинку лучше наверно добавить через псевдоэлемент before.

> <div class="portfolioimage"><img src="images/portfolio1.jpg" alt="picture"></div>


замени дивы на ссылки тут

> <div class="socialnetworks" id="facebook">


лучше сделать все классами, например class="social-networks social-facebook" так как id неудобы при верстке. Я советую реже использовать id или не использовать вовсе.

> font-family: "Lato";


Не збывай в конце списка добавлять fallback шрифт: http://htmlbook.ru/css/font-family (по моему я об этом писал)

CSS весь как-то раскособочился, нагугли сервис форматирования cSS и отформатируй.

> font-size: 18pt;


Всегда когда задаешь font-size задавай line-heitgh.

> .button+span{


Что за странный стиль если прочитать: любой спан, идущий после кнопки с классом button?

Причем далее идет еще более страный стиль:

> input:checked+span{


Любой спан идущий после любой нажатой кнопки?

Не пиши такие противоречивые стили. используй классы например

.portfolio-selector .button
.portfolio-selector .radio:checked + .button

Смотри, насколько это понятнее: даже не видя html понятно что это за элементы.

> <div class="socialnetworks" id="yellowthing"><a href="https://gist.github.com/codedokode/58ebc90bd006baf4b35c"></a></div>


Я думаю div тут лишний.

Сделай чтобы социальные кнопки реагировали на наведение. Темнели или светлели например или еще как-то.
3342 Кб, 1224x672
#763 #453584
>>453485

Пока довольно слабо сделано и много чего надо исправить.

> <div id="webpaint"><a class="logo" href="">ebpaint</a></div>


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

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

Ну и не придется шрифт подключать ради 7 букв.

Буква W в логотипе не кликабельна. Буква W неправильно выровнена относительно букв ebpaint по вертикали, а сами буквы крупнее чем на макете.

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

Слева от заголовка белая вертикальная полоса.

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

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

Мне кажется тут реально минимальную ширину сделать 1111px (по ширине портфолио). А в надписи branding agency вместо br сделать автоматический перенос строки.

Размер текста

> We are Webpaint


> digital&branding agency based



Больше чем на макете. Сам текст должен быть сделан более тонким/легким (не 400) шрифтом.

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

Ты возможно напутал с размером текста из-за использования pt. В фотошопе (как и в типографике) пункт это по моему 1/72 дюйма и число в пикселях рассчитывается через указанное в документе разрешение (dpi). В общем я не уверен но скорее всего если в фотошопе текст имеет размер 16pt то в css это 16px.

В CSS pt это 1.25 пикселя. Ты можешь прочесть в стандартах определение про 1/72 дюйма, но я ни разу такого не видел на практике. Может быть при печати это так, не знаю.

Почитай:

http://www.w3.org/Style/Examples/007/units.ru.html (тут перевод странный)
http://css-live.ru/articles/novye-i-starye-edinicy-izmereniya-kratkij-obzor.html

Заметь что там довольно сложное определение пикселя. Это связано с появлением ретина-экранов. Раньше 1 css пиксель всегда соответстовал 1 пикселю на экране, но с ретиной все бы стало слишком мелким, и им пришлось придумать более хитроумное определение (в итоге на ретине 1 css пиксель отображается как 2×2 пикселя).

Единицы измерения вроде mm, cm, in предназначены в первую очередь для печати на бумаге. На экране удобнее использовать px и em когда мы хотим привязаться к размеру шрифта.

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

На кнопке See portfolio сама кнопка не кликабельна, только текст.

На иконке часов (Elit Ultricies) я вижу артефакты сжатия JPEG, ты ее не из джипега вырезал? Также, часы выводятся чуть обрезанными слева. Верстальщик должен видеть такие вещи.

Фотоаппарат как-то некачественно обрезан, если посмотреть картинку /images/services.png то видны следы ластика. Ты не умеешь в фотошопе отключать фоновый слой? Это плохо конечно. Лучше отключить фон и скопировать иконку на прозрачном фоне чем руками пытаться его удалить.В фотошопе alt + клик по «глазу» на слое оставляет видимым только этот слой (а правый клик инстурментом Rectangular Marquee показывает список слоев под текущей точкой).

Надписи SEE PORTFOLIO, GRAPHIC надо сделать нормальными, а капс лок сделать через CSS.

> checked="checked"


В HTML можно писать просто checked

> <a href="" class="navigation" id="active">


active лучше сделать классом, id обычно обозначает конкретный элемент.

> pbutton


Я бы советовал давать более читаемые и понятные названия. portfolio-button например.

> <div class="spritecontainer" id="android"></div>


Фоновую картинку лучше наверно добавить через псевдоэлемент before.

> <div class="portfolioimage"><img src="images/portfolio1.jpg" alt="picture"></div>


замени дивы на ссылки тут

> <div class="socialnetworks" id="facebook">


лучше сделать все классами, например class="social-networks social-facebook" так как id неудобы при верстке. Я советую реже использовать id или не использовать вовсе.

> font-family: "Lato";


Не збывай в конце списка добавлять fallback шрифт: http://htmlbook.ru/css/font-family (по моему я об этом писал)

CSS весь как-то раскособочился, нагугли сервис форматирования cSS и отформатируй.

> font-size: 18pt;


Всегда когда задаешь font-size задавай line-heitgh.

> .button+span{


Что за странный стиль если прочитать: любой спан, идущий после кнопки с классом button?

Причем далее идет еще более страный стиль:

> input:checked+span{


Любой спан идущий после любой нажатой кнопки?

Не пиши такие противоречивые стили. используй классы например

.portfolio-selector .button
.portfolio-selector .radio:checked + .button

Смотри, насколько это понятнее: даже не видя html понятно что это за элементы.

> <div class="socialnetworks" id="yellowthing"><a href="https://gist.github.com/codedokode/58ebc90bd006baf4b35c"></a></div>


Я думаю div тут лишний.

Сделай чтобы социальные кнопки реагировали на наведение. Темнели или светлели например или еще как-то.
#764 #453623
Аноны, посмотрите пожалуйста на эту попытку написания валидации для форм, для задачи про студентов. Там может немного запутано показаться поэтому поясню немного, суть в том что я не смог в одну функцию поместить и очистку строк при помощи при помощи trim и т.д. и непосредственно проверку правильности (количество символов и т.д.) Поэтому метод clear() чистит строки от ненужных символов, после этого передаёт уже очищенный массив, который используется для нового объекта который уже через метод validate() проверяет другие параметры и возвращает массив ошибок в случае чего. У меня такое ощущение что я очень раково всё выполнил, если я использую подготовленные выражения то мне нет смысла чистить строки через тримы и т.д.? Вот код http://ideone.com/A8d8hi
#765 #453635
ОП, подскажи нубу, вкатившемуся из других языков.
Пробежался по задачкам -- все что в туторах могу решить, сложности возникают пожалуй лишь с задачами среднего уровня (до пхп писал на c# и с++)

Так вот, после строгих шарпа и си++ (особенно последнего) я никак не в могу в нормальный код на пхп.

Как пример: http://ideone.com/oXXHdo

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

В примере понятно что ajax бесполезен, но я именно для примера привел: есть вот js/ajax код какой-то, есть хтмл в который надо внедрить пхп, есть сам пхп код. Как правильно разделить? Если с js можно в отдельный файл его пихнуть и подключить, то как быть, когда мне нужно в хтмл внедрить пхп? Смотрю на эти echo в которых печатаются хтмл-теги и интуитивно понимаю, что это говно.

Подскажи, пожалуйста.
#766 #453636
>>453635
Я так понял то, что ты хочешь, называется шаблонизацией. Смотри задачу на сайт для студентов у ОПа.
#767 #453637
>>453636
хм, упустил из виду видимо. спасибо, гляну.
#768 #453658
http://ideone.com/WC9NKx
Проверьте решение задачки с банкоматом.
#769 #453719
>>449425
<?php

error_reporting(-1);

$anonDice1 = mt_rand(1,6);
$anonDice2 = mt_rand(1,6);

$anonSum = ($anonDice1+$anonDice2);

$botDice1 = mt_rand(1,6);
$botDice2 = mt_rand(1,6);

$botSun - ($botDice1+$botDice2);

echo "у анона выпало $anonDice1 и $anonDice2\n";
echo "у бота выпало $botDice1 и $botDice2\n";

if(($anonDice1==$anonDice2)&&($botDice1==$botDice2)){
\techo"2 дабла просто заебись, игру надо прекращать \n";
\texit();
\t
}

if($anonSum==$botSum){
\techo"победила дружба\n";
}

if($anonSum > $botSum){
echo"победил anon\n"; \t
}

if($anonSum < $botSum){
\techo"победил бот епта\n";
}

Почему у меня всегда пишется, победил анон, что бы не выпало у бота?
#769 #453719
>>449425
<?php

error_reporting(-1);

$anonDice1 = mt_rand(1,6);
$anonDice2 = mt_rand(1,6);

$anonSum = ($anonDice1+$anonDice2);

$botDice1 = mt_rand(1,6);
$botDice2 = mt_rand(1,6);

$botSun - ($botDice1+$botDice2);

echo "у анона выпало $anonDice1 и $anonDice2\n";
echo "у бота выпало $botDice1 и $botDice2\n";

if(($anonDice1==$anonDice2)&&($botDice1==$botDice2)){
\techo"2 дабла просто заебись, игру надо прекращать \n";
\texit();
\t
}

if($anonSum==$botSum){
\techo"победила дружба\n";
}

if($anonSum > $botSum){
echo"победил anon\n"; \t
}

if($anonSum < $botSum){
\techo"победил бот епта\n";
}

Почему у меня всегда пишется, победил анон, что бы не выпало у бота?
#770 #453722
>>453719
Для начала неплохо бы выкладывать ссылку на айдеон, вместо кода.
#771 #453730
>>453719

> $botSun - ($botDice1+$botDice2);


Тут точно минус нужен?
#772 #453732
>>453719
Потому что, в твоём коде $botSum будет всегда равен нулю.
#773 #453745
Лежит на сервере файл. Как средствами php определить что это за файл. Картинка, видео или музыка.
#774 #453746
Такой вопрос. Я прочитал в книге про то, как делать отправку электронных писем с ПХП. Как сделать так, чтобы отправлялось содержимое текстового поля textarea? В jQuery есть метод .val(), который возвращает содержимое поля. В ПХП есть что то подобное? Или может как то можно добавить в переменную содержание поля?
#775 #453751
>>453746
в хтмл у текстареи указываешь атрибут name, например name='info', а у формы его содержащей action и method. в пхп его содержимое ловится как $_POST['info'] или $_GET['info'] в зависимости от метода и дальше уже делай с ним что хочешь. дочитай до форм, постов и гетов и все поймешь.
#776 #453754
Пацаны, сорри за совсем кретинский вопрос, а в чем профит социальных кнопок, что происходит когда я тыкаю на сердечко на каком-то постороннем сайте?
сыч без социалок
#777 #453774
>>453751
Спасибо.
#778 #453804
ОПчик, я тебе завтра исправлю правки. Сегодня у меня ненависть к elementary os и сон.
#779 #453900
О великие техно-демиурги, о цифровые монахи что общаются посредством бинарного кода. Мыслители анализирующие музыку сфер.
Вообщем, пока я не докатился до переменных $fuck и $ass мне срочно нужен разбор полётов от вас, великих мудрецов и мыслителей.
Задача про школьника, айфон, кредит. Задача от гения педагогики-Опа - исправить в коде то, что позволяет школьнику переплатить и оставить банк в должниках.

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

Не знаю как это называется, костыль или мозгоёбство, но это то до чего я дошёл своим куцым умишком. Прошу снизойти и показать как нужно/показать где я не прав в своём решении.
Сука, сонный блядь
http://ideone.com/wm6tW8
#780 #453907
Выручайте. Не запускается Апаче. httpd.exe syntax error on line 493.

Что делать?

Спасибо
#781 #453920
>>453907
В httpd.conf проверь пути, например:
PHPIniDir "C:/php"
LoadFile "C:/php/php5ts.dll"
LoadModule php5_module "C:/php/php5apache2.dll"
AddType application/x-httpd-php .php
#782 #453922
>>453754
Реклама. Чем больше сердечек, тем с большим уважением хомяки отнесутся к ресурсу.
#783 #453924
Заминочка с Yii.
Суть такова: надо вывести связанные таблицы (книги и жанры, многие ко многим), желательно через виджет CListView.
http://ideone.com/njRtI5
Выдает ошибку:

CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'genre.genre_id' in 'where clause'. The SQL statement executed was: SELECT `t`.`book_id` AS `t0_c0`, `t`.`book_title` AS `t0_c1`, `t`.`price` AS `t0_c2`, `t`.`quantity` AS `t0_c3`, `t`.`description` AS `t0_c4`, `t`.`image` AS `t0_c5`, `t`.`date` AS `t0_c6` FROM `book` `t` WHERE (genre.genre_id=:genre_id) LIMIT 20

Что интересно, если отключить пагинацию 'pagination'=>false, то ошибки нет (но и пагинации, ес-но).
Насколько я понял, то ли он это условие WHERE подставляет до того, как сделает JOIN таблиц, то ли сует его в запрос пагинатора, который должен возвращать кол-во записей.
Блин, целый день угробил на это.
Если не подскажете, придется лепить отдельно в форыче вывод записей и цеплять к ним объект пагинации.
Но таки предпочтительнее было бы это сделать средствами CListView.
#784 #453926
>>453924
Выражение 'condition' => 'genre.genre_id=:genre_id' должно быть в массиве 'with' после 'alias'.
#785 #453927
>>453926
В массиве 'genres', если быть точным.
#786 #453931
>>453924
Еще ты можешь оставить как есть, но при этом свойство together (http://www.yiiframework.com/doc/api/1.1/CDbCriteria#together-detail) для 'genres' должно быть true. Постарайся сам понять почему и как это работает.
#788 #453953
>>453900
Бампаю свой реквест мудрых подзатыльников.
#789 #453973
>>453900
Для начала

>if ($creditBalance < 5000); {


Тут вот убери точку с запятой

Потом остаток кредита проверяй перед тем как платить.
#790 #453978
Как наиболее красиво написать следующую конструкцию:

if (первое условие) {
действие необходимое для получения данных для второго условия;
if (второе условие) {
} else {
действие 1;
}
} else {
действие 1;
}

как видно тут повторение "else { действие 1; }" что не есть красиво, какие у вас есть варианты?
(можно с goto, но оно же зло)
#791 #453981
>>453978
Я тебя понял на столько насколько тебя понял.
if (первое условие) {
\tдействие необходимое для получения данных для второго условия;
\tif (второе условие) {
\t\tдействие 1;
\t} else {
\tдействие 2;
\t}
}
#793 #453984
Поясните за шаблонизацию, есть такой код, в $allStudent приходит список всех студентов из базы данных, дальше их надо все вывести в ХТМЛ-таблице

<?php
include "inc/bd.php";
include "inc/student.class.php";
include "inc/form.class.php";
$allStudent = Student::outAllStudent($pdo);
?>

тут идёт ХТМЛ шапка таблицы а дальше вновь начинается ПХП код+хтмл

<?
foreach($allStudent as $student) {
?>
<tr>
<td><?= $student["name"];?></td>
<td><?= $student["lastname"];?></a></td>
<td><?= $student["groupNumber"];?></td>
<td><?= $student["email"];?></td>
<td><?= $student["point"];?></td>
<td><?= $student["yearBorn"];?></a></td>
<td><?= $student["site"];?></td>
<td><?= $student["pol"];?></td>
</tr>
<?
}
?>
</table>

Поясните можно ли всё что идёт после этого блока который в самом вверху:

<?php
include "inc/bd.php";
include "inc/student.class.php";
include "inc/form.class.php";
$allStudent = Student::outAllStudent($pdo);
?>

Забросить в шаблон? Не будет ли это нарушением логики приложения, ведь основное что на этой страницы есть получение массива студентов из базы данных, можно ли закидывать foratch в шаблон или это нарушение?
#793 #453984
Поясните за шаблонизацию, есть такой код, в $allStudent приходит список всех студентов из базы данных, дальше их надо все вывести в ХТМЛ-таблице

<?php
include "inc/bd.php";
include "inc/student.class.php";
include "inc/form.class.php";
$allStudent = Student::outAllStudent($pdo);
?>

тут идёт ХТМЛ шапка таблицы а дальше вновь начинается ПХП код+хтмл

<?
foreach($allStudent as $student) {
?>
<tr>
<td><?= $student["name"];?></td>
<td><?= $student["lastname"];?></a></td>
<td><?= $student["groupNumber"];?></td>
<td><?= $student["email"];?></td>
<td><?= $student["point"];?></td>
<td><?= $student["yearBorn"];?></a></td>
<td><?= $student["site"];?></td>
<td><?= $student["pol"];?></td>
</tr>
<?
}
?>
</table>

Поясните можно ли всё что идёт после этого блока который в самом вверху:

<?php
include "inc/bd.php";
include "inc/student.class.php";
include "inc/form.class.php";
$allStudent = Student::outAllStudent($pdo);
?>

Забросить в шаблон? Не будет ли это нарушением логики приложения, ведь основное что на этой страницы есть получение массива студентов из базы данных, можно ли закидывать foratch в шаблон или это нарушение?
#794 #453989
>>453983
поправился, вот так вот:
https://ideone.com/AmXonp
как видишь повторение "else { действие 1; }"
ОП #795 #453992
Аноны, подождите еще немного, скоро всем отвечу.
#796 #453993
>>453989
Если можно действие необходимое для получения данных для второго условия совершить заранее. Можно сделать так
https://ideone.com/10z49o

Если их можно совершить только после первого условия. То тут уж не знаю.

Что за задача кстати?
#797 #453997
Ох, на свежую голову посмотрел - сколько я хуиты понаписал, ё маё.
>>453973
Спасибо, мессир.
Я исправил, но получилась снова хуйня - код не хочет платить последнюю хапку так, чтобы получилось 61 тысяча, а я слышал, что мудрецы здесь отвечали кому то, что должна быть 61 тысяча.
Ожидаю прихода Всесветлейшего.
http://ideone.com/gJGpym
#798 #454002
>>453997
Потом остаток кредита проверяй перед тем как платить, говорю я.

Сначала банк начислил все проценты. И потом, перед самой выплатой начинаешь проверять, сколько собственно Анон должен банку. Больше 5000, то выплачиваешь 5000, если меньше, то выплачиваешь ровно столько сколько осталось.

А так в верном направлении пока движешься.
#799 #454008
>>453993
я не конкретную задачу, просто не первый раз встречаю такую конструкцию, хотелось бы красивое решение.
нет заранее не подходит вдруг там запрос к базе - лишняя нагрузка
#800 #454011
>>454008

Лишняя нагрузка и запросы к базе решаются помещением результата в переменную:

$userExists = $userMapper->doesUserExist($name);

if ($userExists) ....
#801 #454016
>>454011
а если они последовательно зависят друг от друга?
https://ideone.com/DT5Bhz
#802 #454020
>>454016

Такой код удобно писать внутри функции и вываливаться через return:

if (!$id) {
return null;
}

$model = load($id);

if (!$model) {
return null;
}

doSomething($model);

return $something;
#803 #454021
>>454020

заметь насколько проще все читается без сложных ифов. Хотя в принципе 2 вложенных ифа это не страшно, страшно когда их 4-5 и больше.
#804 #454033
Что то у меня сумбурненько проходит обучение. Сел поиграть в дотку, и почти месяц внезапно пропал.

https://github.com/tokotun/uppy
ОП, если анализ займет мног времени, то просто укажи на несколько первых ошибок, что б я сразу их начал исправлять.

>А ты все файлы в одну папку кладешь? Что если загрузить 2 файла с одинаковым именем но разным содержимым?



Это я предусмотрел. Имя файла хранится в БД. А в сам файл меняет имя с "picture.jpg" на "GhKEGFeeqJ"
А когда скачивается, то файл получает обратно своё имя из БД. Насколько это решение правильно незнаю

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



Потому что так сделано в RGhost.ru. Там кликом по лейблу можно переключатся между страничкой загрузки и страничкой закаченных файлов.
Я же его копию делаю.

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



Запрос отправляется нажатием на Enter. Опять же слизано с RGhost.ru, там рядом с поиском нет кнопки "отправить".

> header('Content-Disposition: attachment; filename=' . $this->name);


>https://github.com/tokotun/uppy/blob/master/uppy/app/functions.php#L7


>для опции filename разрешено использовать только латиницу (ASCII если точнее). русские буквы разные браузеры понимают по-разному. Лучше не используй эту опцию вообще.



мм... Именно эта опция отвечала за переименование файла. Из ..\uppy\container\GhKEGFeeqJ в .\uppy\container\filename.jpg
Тогда, мне придётся поискать альтернативу.
Пока на примете 2 варианта. Или вовсе не менять имя файла на уникальный код. И тогда не смогу хранить файлы с одинаковыми именами.
Или сделать велосипедную свистопляску - перед скачиванием загружать под исходным именем этот файл в какую-то папку. А потом уже этот переименованный
файл отдавать на скачивание.
Ну, или какие существуют варианты этого решения?

>Я думаю, удобно при загрузке из БД преобразовать дату из mysql в php формат. А при вставке делать обратное.



Не уверен что правильно понял. Это нужно, для того, что б из такого формата "2011-06-10 15:18:00" переделывать в такой “4 июня 2011, 14:57″ ? Верно?

>Ты отключил выполнение php скриптов в папке загрузок?



Нашел такое решение - создать в каталоге с файлами .htaccess

php_flag engine 0
AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp

но файлы у меня закачиваются без расширений. Нужен ли такой вариант?

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

И касательно метаданных, в какую сторону копать что б их првильно извлекать.
#804 #454033
Что то у меня сумбурненько проходит обучение. Сел поиграть в дотку, и почти месяц внезапно пропал.

https://github.com/tokotun/uppy
ОП, если анализ займет мног времени, то просто укажи на несколько первых ошибок, что б я сразу их начал исправлять.

>А ты все файлы в одну папку кладешь? Что если загрузить 2 файла с одинаковым именем но разным содержимым?



Это я предусмотрел. Имя файла хранится в БД. А в сам файл меняет имя с "picture.jpg" на "GhKEGFeeqJ"
А когда скачивается, то файл получает обратно своё имя из БД. Насколько это решение правильно незнаю

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



Потому что так сделано в RGhost.ru. Там кликом по лейблу можно переключатся между страничкой загрузки и страничкой закаченных файлов.
Я же его копию делаю.

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



Запрос отправляется нажатием на Enter. Опять же слизано с RGhost.ru, там рядом с поиском нет кнопки "отправить".

> header('Content-Disposition: attachment; filename=' . $this->name);


>https://github.com/tokotun/uppy/blob/master/uppy/app/functions.php#L7


>для опции filename разрешено использовать только латиницу (ASCII если точнее). русские буквы разные браузеры понимают по-разному. Лучше не используй эту опцию вообще.



мм... Именно эта опция отвечала за переименование файла. Из ..\uppy\container\GhKEGFeeqJ в .\uppy\container\filename.jpg
Тогда, мне придётся поискать альтернативу.
Пока на примете 2 варианта. Или вовсе не менять имя файла на уникальный код. И тогда не смогу хранить файлы с одинаковыми именами.
Или сделать велосипедную свистопляску - перед скачиванием загружать под исходным именем этот файл в какую-то папку. А потом уже этот переименованный
файл отдавать на скачивание.
Ну, или какие существуют варианты этого решения?

>Я думаю, удобно при загрузке из БД преобразовать дату из mysql в php формат. А при вставке делать обратное.



Не уверен что правильно понял. Это нужно, для того, что б из такого формата "2011-06-10 15:18:00" переделывать в такой “4 июня 2011, 14:57″ ? Верно?

>Ты отключил выполнение php скриптов в папке загрузок?



Нашел такое решение - создать в каталоге с файлами .htaccess

php_flag engine 0
AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp

но файлы у меня закачиваются без расширений. Нужен ли такой вариант?

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

И касательно метаданных, в какую сторону копать что б их првильно извлекать.
#805 #454038
Пилите перекат, пока тред найдешь пять минут проходит
#806 #454045
Вопрос по Yii2, сам фреймворк это как каркас сайта насколько я понял, так вот допустим если я наполню этот каркас изменяя исходный код, как приступить к разработке второго? скачивать заново, или есть возможность обнулить изменения на исходный код? Или я не так понял суть фреймворка?
56 Кб, 1075x560
#807 #454049
>>453584
Смотри, ОП, я уменьшил поля для маленького разрешения, а элементы все равно переносятся.
#808 #454050
>>454033

> А в сам файл меняет имя с "picture.jpg" на "GhKEGFeeqJ"


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

> мм... Именно эта опция отвечала за переименование файла.


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

/download/123.txt(реальное имя на диске)/document.doc

Чтобы это реализовать ты можешь использовать 2 подхода:

- переписывание URL через modrewrite в htaccess
- X_SendFIle когда сначала вызывается твой скрипт. а потом он дает команду Апачу отдавать конкретный файл.
#809 #454056
>>454038

Запилим. А пока ты можешь просто не закрывать тред или нажать звездочку в адресной строке.

>>454049

очевидно надо ширину колонок сделать зависимой от ширины страницы

>>454045

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

>>454033

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


нет, это неэффективно. У нас на файлообменнике большинство нагрузки это просмотр файла и скачивание, и наша цель как можно проще это реализовать. Вариант с mod rewrite который переписывает URL

/download/123.txt/documents.doc

на

/files/123.txt

Самый эффективный. Вариант с X-SendFile помедленнее, но он хорош тем что там вызывается
PHP и он может проверить что имя в конце (document.doc) не подменено, так же он может вводить ограничения на число скачиваний и т.д.

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

Ссылки

http://www.jasny.net/articles/how-i-php-x-sendfile/ (нужно ставить в Апач модуль для этого)
http://serverfault.com/questions/650633/rename-file-in-apache (mod rewrite)

Неэффективные варианты типа исплоьзования readfile мы не будем рассматривать так как они держат скрипт в памяти на все время отдачи файла.
#809 #454056
>>454038

Запилим. А пока ты можешь просто не закрывать тред или нажать звездочку в адресной строке.

>>454049

очевидно надо ширину колонок сделать зависимой от ширины страницы

>>454045

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

>>454033

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


нет, это неэффективно. У нас на файлообменнике большинство нагрузки это просмотр файла и скачивание, и наша цель как можно проще это реализовать. Вариант с mod rewrite который переписывает URL

/download/123.txt/documents.doc

на

/files/123.txt

Самый эффективный. Вариант с X-SendFile помедленнее, но он хорош тем что там вызывается
PHP и он может проверить что имя в конце (document.doc) не подменено, так же он может вводить ограничения на число скачиваний и т.д.

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

Ссылки

http://www.jasny.net/articles/how-i-php-x-sendfile/ (нужно ставить в Апач модуль для этого)
http://serverfault.com/questions/650633/rename-file-in-apache (mod rewrite)

Неэффективные варианты типа исплоьзования readfile мы не будем рассматривать так как они держат скрипт в памяти на все время отдачи файла.
#810 #454059
>>454033

> Это нужно, для того, что б из такого формата "2011-06-10 15:18:00" переделывать в такой “4 июня 2011, 14:57″ ?


Нет, «PHP формат» это либо число unix timestamp котрое возвращает time() либо объект DateTime. С помощью стандартных функций ты можешь с такой датой работать. В в твоем варианте не можешь, надо сначала распарсить строку.

Вот мой старый урок по датам: https://gist.github.com/codedokode/10539805

Мне кажется, что хранить дату в стандартном виде внутри объекта было бы удобнее.

> но файлы у меня закачиваются без расширений. Нужен ли такой вариант?


Пусть будет как доплониетльная защита.

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


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

Аякс тут не обязателен. Тебе незачем слать запрос на сервер чтобы передвинуть форму. Но аякс хорошо бы использовать при отправке комментария.

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


Библиотека https://github.com/JamesHeinrich/getID3/

Она доступна в packagist если ты используешь композер.
#811 #454073
Аноны, если я кому-то советовал gitinore'ить composer.lock — я был не прав. Его все же советуют держать в репозитории чтобы у всех были одни и те же версии библиотек.

>>454033

А, ты уже сам нашел getId3. Молодец.

> maxFileSize' => 33554432, // 32 MB


Там есть еще настройки php.ini которые ограничивают объем загружаемого файла. Я советую в README.md упомняуть эти настройки. таким образом, если я или кто-то захочет скачать и развернуть проект, он будет предупрежден что ему надо поменять чтобы закачивать большие файлы.

> 'templates.path' => 'uppy\\templates\\'


Лучше прямые слеши так как они работают и под Win и под linux.

> $this->getID3 = new \getID3;


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

Я думаю объект getId3 тоже стоит сделать синглтоном.

> finfo_file($finfo, $filePath)


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

> var $result = NULL;


var использовался в PHP4. Ты проходил мой урок по ООП? Мануал почитай что ли чтобы вспомнить современный php http://php.net/manual/ru/language.oop5.php

для полей и методов надо проставить public/protected/private

Продумай API класса MediaInfo. Ну то есть напиши несколько простых кусочков кода на 5-6 строк с его использованием и посмотри, можно ли сделать лучше? Например:

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

удобно ли это делать с твоим API? Может можно сделать класс более удобным в исплоьзовании?
#811 #454073
Аноны, если я кому-то советовал gitinore'ить composer.lock — я был не прав. Его все же советуют держать в репозитории чтобы у всех были одни и те же версии библиотек.

>>454033

А, ты уже сам нашел getId3. Молодец.

> maxFileSize' => 33554432, // 32 MB


Там есть еще настройки php.ini которые ограничивают объем загружаемого файла. Я советую в README.md упомняуть эти настройки. таким образом, если я или кто-то захочет скачать и развернуть проект, он будет предупрежден что ему надо поменять чтобы закачивать большие файлы.

> 'templates.path' => 'uppy\\templates\\'


Лучше прямые слеши так как они работают и под Win и под linux.

> $this->getID3 = new \getID3;


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

Я думаю объект getId3 тоже стоит сделать синглтоном.

> finfo_file($finfo, $filePath)


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

> var $result = NULL;


var использовался в PHP4. Ты проходил мой урок по ООП? Мануал почитай что ли чтобы вспомнить современный php http://php.net/manual/ru/language.oop5.php

для полей и методов надо проставить public/protected/private

Продумай API класса MediaInfo. Ну то есть напиши несколько простых кусочков кода на 5-6 строк с его использованием и посмотри, можно ли сделать лучше? Например:

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

удобно ли это делать с твоим API? Может можно сделать класс более удобным в исплоьзовании?
#812 #454075
>>453926
Не совсем то, что надо.
Ошибка не вылезает, но теперь выводит все записи, без учета условия.

>>453931
Вот это помогло, спасибо.

>Постарайся сам понять почему и как это работает.


Да уж постараюсь теперь. Уже неделю сижу над такими мелочами.
Придется забросить проект (хотя я надеялся сделать его за пару дней, там элементарщина казалось бы, только как ее реализовать средствами фреймворка) и сесть за суровые мануалы.
Я понимаю к чему ты, типа не используй копипаст, не будь быдло-кодером.
Но многим людям для мотивации обучения нужно видеть результаты. Поэтому хватаются за проекты, вместо того чтобы позадротить теорию.
У меня дико горит от колоссальной затраты времени, которая не приносит пока видимых результатов.
#813 #454080
>>454075

Я тут мимопроходил, но я посмотрел на твой исходный вопрос и текст запроса:

> Column not found: 1054 Unknown column 'genre.genre_id'


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



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

Что я хочу сказать: тебе надо сначала изчить язык SQL и потом изучить сам фрейморк (у Yii неплохая документация). Если ты не хочешь это изучать, то ты всегда будешь напарываться на такие грабли. ты можешь подумать что вместо изучения теории можно нагуглить овтет, но это помогает только в очень простых ситуациях. А как только у тебя будет ситуация посложнее, ты так же окажешься в тупике.

> Поэтому хватаются за проекты, вместо того чтобы позадротить теорию.


Тебе надо хвататься за изучение SQL сначала.

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


Потому что надо идти от простхы вещей к сложным (SQL -> Active Record в Yii), а не браться сразу за написание кода. Если ты не можешь руками такой запрос написать и прочитать, то браться за Юи рановато.
#814 #454082
>>454075

Ну и у нас есть урок по SQL с простыми туториалами и задачками если интересно: https://gist.github.com/codedokode/10539213
#815 #454083
>>454075

Хотя with ты вроде добавил, странно, тогда видимо ошибка в другом. Тут

http://www.yiiframework.com/doc/guide/1.1/ru/database.arr#sec-5

написано что with делает жадную загрузку связанных записей но не написано что он делает JOIn. А без джойна ты не можешь использовать алиас genre.
#816 #454094
>>454083
Все так, тут http://www.yiiframework.com/doc/api/1.1/CDbCriteria#together-detail об этом как раз написано.
#817 #454096
>>453446

>Ну как же так, мы же вроде разобрались тогда?


Ну я просто до сих пор не понял почему так случается - почему он становиться пустым?

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


Разве нельзя одну константу использовать в разных классах? А как тогда быть?

Еще вопрос, как мне правильно унаследовать метод обращения к константе? Если писать в родительском классе self::CONSTANT - выдается ошибка что неизвестная константа.
#818 #454098
>>453623

> $data[$key] = trim(strip_tags($value));


Непонятно зачем strip_tags. С XSS лучше бороться при выводе данных

> if (count($error) > 0) {


> return $error;


> }



А что функция вернет если ошибок нет? Почему такой странный подход? Лучше когда функция возвращает значения одного типа, если массив то всегда массив.

> if (strlen($value) > 5


Надо исплоьзовать mb_strlen: https://gist.github.com/codedokode/ff99e357e9860ea169b8

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


зачем (array)?

> function clear($data)


Непонятно назначение этой функции. Ведь функция validate проверяет то, что хранится в $this->form

Для методов надо расставить public/protected/private. Поля лучше сделать закрытыми.

> if (is_int($value)) {


Если ты берешь данные из POST/GET ты никогда не получишь int, там либо строки либо массивы.

> abs((int) $value);


Непонятно какой смысл делать abs и какой смысл преобразовывать int в int.

> (int) $value;


эта команда ничего не делает так как ты не сохраняешь результат.

Класс назван неудачно. Можно подумать он работает с любыми формами, но на самом деле только с одной. Значит надо назвать его например StudentForm.

Ну и если ты делаешь задачу про студентов то наверно удобнее заполнять данные в объект-студента и проверять его. А не гонять туда-сюда массивы.
#818 #454098
>>453623

> $data[$key] = trim(strip_tags($value));


Непонятно зачем strip_tags. С XSS лучше бороться при выводе данных

> if (count($error) > 0) {


> return $error;


> }



А что функция вернет если ошибок нет? Почему такой странный подход? Лучше когда функция возвращает значения одного типа, если массив то всегда массив.

> if (strlen($value) > 5


Надо исплоьзовать mb_strlen: https://gist.github.com/codedokode/ff99e357e9860ea169b8

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


зачем (array)?

> function clear($data)


Непонятно назначение этой функции. Ведь функция validate проверяет то, что хранится в $this->form

Для методов надо расставить public/protected/private. Поля лучше сделать закрытыми.

> if (is_int($value)) {


Если ты берешь данные из POST/GET ты никогда не получишь int, там либо строки либо массивы.

> abs((int) $value);


Непонятно какой смысл делать abs и какой смысл преобразовывать int в int.

> (int) $value;


эта команда ничего не делает так как ты не сохраняешь результат.

Класс назван неудачно. Можно подумать он работает с любыми формами, но на самом деле только с одной. Значит надо назвать его например StudentForm.

Ну и если ты делаешь задачу про студентов то наверно удобнее заполнять данные в объект-студента и проверять его. А не гонять туда-сюда массивы.
#819 #454101
>>449425 Опчик, никак не могу понять что нужно дописывать в задаче 4.1. Неужели я настолько туп?
#820 #454102
>>454096

>Ну я просто до сих пор не понял почему так случается - почему он становиться пустым?


Я даже с проверкой isset($newLeader) сейчас сделал - он все равно выдает ошибку, только уже о том что нельзя обращаться к типу boolean
#821 #454105
>>453635

Не смешивай в одном файле php и HTML. Выноси html-код в шаблоны: http://www.phpinfo.su/articles/practice/shablony_v_php.html

Не используй echo для вывода.

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

То есть у тебя должно быть 2 файла, например list.php и templates/list.phtml

>>453658

> if(is_float($amount/100)){


это плохая проверка, так как is_float не проверяет является ли число нецелым. Он проверяет только тип под которым оно хранится. Как пример:

var_dump(is_float(2.0)); // true

Проверять лучше взятием остатка от деления на 100: $x % 100

> as $key => $value) {


Надо давать нормальные имена. Почиатй http://learn.javascript.ru/write-unmain-code#будьте-абстрактны-при-выборе-имени

> if($count>$value)$count=$value;


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

> }else{


> continue;


Бессмысленная команда. Цикл продолжится в любом случае.

> $amount=$amount-$key*$count;


Тут можно использовать -=
#821 #454105
>>453635

Не смешивай в одном файле php и HTML. Выноси html-код в шаблоны: http://www.phpinfo.su/articles/practice/shablony_v_php.html

Не используй echo для вывода.

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

То есть у тебя должно быть 2 файла, например list.php и templates/list.phtml

>>453658

> if(is_float($amount/100)){


это плохая проверка, так как is_float не проверяет является ли число нецелым. Он проверяет только тип под которым оно хранится. Как пример:

var_dump(is_float(2.0)); // true

Проверять лучше взятием остатка от деления на 100: $x % 100

> as $key => $value) {


Надо давать нормальные имена. Почиатй http://learn.javascript.ru/write-unmain-code#будьте-абстрактны-при-выборе-имени

> if($count>$value)$count=$value;


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

> }else{


> continue;


Бессмысленная команда. Цикл продолжится в любом случае.

> $amount=$amount-$key*$count;


Тут можно использовать -=
#822 #454107
>>453745

Можно по расширению — это быстрее всего. Если расширения нет или ты не уверен что оно правильное то вот

Есть такое расширение http://php.net/manual/ru/book.fileinfo.php
Есть linux команда file
Есть библиотека https://github.com/JamesHeinrich/getID3/ для чтения информации из медиафайлов

>>453746

https://php.net/manual/ru/tutorial.forms.php

>>453754

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

Ну и еще есть «расшарить» — это когда ссылка постится не только в ленту, но и на стенку и ее видят больше человек + поисковики.

>>453900

> if ($creditBalance < 5000);


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

Будь внимателен к всяким значкам.

>>453997

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


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

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

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

А твой алгоритм, если долг остался меньше 5000 не начисляет на него процент и комиссию.
#822 #454107
>>453745

Можно по расширению — это быстрее всего. Если расширения нет или ты не уверен что оно правильное то вот

Есть такое расширение http://php.net/manual/ru/book.fileinfo.php
Есть linux команда file
Есть библиотека https://github.com/JamesHeinrich/getID3/ для чтения информации из медиафайлов

>>453746

https://php.net/manual/ru/tutorial.forms.php

>>453754

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

Ну и еще есть «расшарить» — это когда ссылка постится не только в ленту, но и на стенку и ее видят больше человек + поисковики.

>>453900

> if ($creditBalance < 5000);


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

Будь внимателен к всяким значкам.

>>453997

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


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

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

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

А твой алгоритм, если долг остался меньше 5000 не начисляет на него процент и комиссию.
#823 #454109
>>453907

Ошибка на 493-й строке в httpd.conf. Так как ты его не запостил то непонятно какая именно.

Проверить файл httpd.conf можно из командной строки если ты умеешь ей пользоваться:

c:\apache\bin\httpd.exe -t

>>453984

для начала почитай http://www.phpinfo.su/articles/practice/shablony_v_php.html

Также если не читал прочти комментарии тут https://github.com/codedokode/pasta/blob/master/student-list.md

Не смешивай php и html. Лучше сделать отдельно php код с логикой и отдельно шаблон для вывода.

> Student::outAllStudent($pdo);


Статические методы это не ООП

> $student["name"]


Опять же на ООП не похоже

> /student.class.php


Советую не писать class так как в современном ООП коде 99% файлов это классы

> Поясните можно ли всё что идёт после этого блока который в самом вверху:


> Забросить в шаблон?


не надо

> можно ли закидывать foratch в шаблон


Можно. Только надо использовать версию с двоеточием https://php.net/manual/ru/control-structures.alternative-syntax.php

> <?= $student["name"];?>


htmlspecialchars где?
#823 #454109
>>453907

Ошибка на 493-й строке в httpd.conf. Так как ты его не запостил то непонятно какая именно.

Проверить файл httpd.conf можно из командной строки если ты умеешь ей пользоваться:

c:\apache\bin\httpd.exe -t

>>453984

для начала почитай http://www.phpinfo.su/articles/practice/shablony_v_php.html

Также если не читал прочти комментарии тут https://github.com/codedokode/pasta/blob/master/student-list.md

Не смешивай php и html. Лучше сделать отдельно php код с логикой и отдельно шаблон для вывода.

> Student::outAllStudent($pdo);


Статические методы это не ООП

> $student["name"]


Опять же на ООП не похоже

> /student.class.php


Советую не писать class так как в современном ООП коде 99% файлов это классы

> Поясните можно ли всё что идёт после этого блока который в самом вверху:


> Забросить в шаблон?


не надо

> можно ли закидывать foratch в шаблон


Можно. Только надо использовать версию с двоеточием https://php.net/manual/ru/control-structures.alternative-syntax.php

> <?= $student["name"];?>


htmlspecialchars где?
#824 #454114
>>453989

Лучше через return выходить если что-то не так.

>>454096

> Ну я просто до сих пор не понял почему так случается - почему он становиться пустым?


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

> Разве нельзя одну константу использовать в разных классах? А как тогда быть?


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

В новом PHP есть такая штука http://php.net/manual/ru/migration55.new-features.php#migration55.new-features.class-name и можно писать просто

Manager::class

не заводя констант.

> Если писать в родительском классе self::CONSTANT - выдается ошибка что неизвестная константа.


Ты не должен из предка обращаться к константам потомка.

> как мне правильно унаследовать метод обращения к константе?


поясни подробнее, я не понял зачем тебе метод для обращения к константе.
#825 #454115
>>454101

там надо дописать код вида:

если (у человека больше очков чем у бота) {
пишем что победил человек;
}

если (у человека меньше) {
пишем что победил бот;
}

если ничья ....
..

и так далее. Ты понял, как работает if?

>>454102

Ставь вардампы.
#826 #454124
>>454114

>поясни подробнее, я не понял зачем тебе метод для обращения к константе.


Ну вот допустим в дочерних классах есть константа ИМЯ, я не хочу в каждом дочернем классе прописывать метод получения имени этой константы, тогда этот метод мне нужно прописать в родительском классе и далее унаследовать его.
#827 #454132
>>454124
Или так: Мне нужно получить имя каждого дочернего класса,

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



Просто я сейчас понял что проблема заключается в том что я пишу self в родительском классе, и естественно получаю то его значение, а не то что в дочернем, не смотря на то что обращаюсь через дочерний.
#828 #454140
>>454132

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

Константа это не поле. Ты не должен переопределять его в потомках.

Если тебе надо возвращать какую-то строку, разную для разных классов, удобно сделать в базовом классе абстрактный метод getsomething() и переопределять его в потомках. То что он абстрактный не позволит создать потомка не переопределив его.
#829 #454141
>>454132

И вообще, если ты хочешь заставить потомков что-то делать или возвращать, используй абстрактный метод. PHP не даст забыть его реализовать в потомке.
#830 #454177
>>454109
Спасибо за совет

>Статические методы это не ООП


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

>Опять же на ООП не похоже


Получил из метода в классе список всех студентов и преобразовал в массив через fetchAll, показалось что так удобнее, надо было в объект?

>htmlspecialchars где?


Кстати да, забыл использовать его, использовал strip_tags, trim и т.д. в методах, а как ты догодался? Или ты имеешь ввиду при передаче из шаблона надо переменные пропускать через htmlspecialchars?

По вот этому http://www.phpinfo.su/articles/practice/shablony_v_php.html так и не смог понять, вроде бы в шаблоне здесь используется пхп код, как его правильно разделять? В моём случае сама логика пхп скрипта в том что бы получить с метода список всех студентов, можно ли всё остальное засунуть в шаблон (может быть немного не в том виде в котором я сделал) а оставить только само получение этого списка?
#831 #454183
>>454177

> что бы не заводить объект для вызова одного метода


В этом ничего страшного нет

> Получил из метода в классе список всех студентов и преобразовал в массив через fetchAll, показалось что так удобнее, надо было в объект?


Массив объектов-студентов наверно. у тебя же все равно есть класс Студент?

> Или ты имеешь ввиду при передаче из шаблона надо переменные пропускать через htmlspecialchars?


Ты читал комментарии к заданию? Там и ссылка есть на урок про XSS https://github.com/codedokode/pasta/blob/master/security/xss.md

Экранировать при вставке в базу неправильная идея. Это неграмотно. Так как данные в базе могут использоваться не только для вывода в HTML но и в других целях.

> использовал strip_tags, trim


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

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


Код в шаблоне только для вывода данных. Не для их получения, подготовки, обработки и тд.
#832 #454184
>>454177

Статические методы там где надо использовать обычные это плохо. Ты не можешь например создать 2 копии объекта с разными настройками из-за них. также ты явно прописываешь класс:

SomeClass::someMethod

И никак нельзя подменить его на другой, а в случае с объектами можно передавть объект любого класса. У меня есть урок про это, но он не совсем для начинающих: https://gist.github.com/codedokode/e1d31a31b37d5f635057
#833 #454204
>>454115
погуглил и вроде бы теперь дошло. спасибо анон
#834 #454207
>>454183

>В этом ничего страшного нет


Проблема в том что в самом классе у меня 8 его свойств (name, email и т.д.) А передать мне надо только объект $pdo для вывода всех студентов, больше ничего не надо, поэтому мне показалось что создавать что то такое:

$student = new Student("","","","","","","",""$pdo);

Будет как-то неправильно. Или так делают?
#835 #454212
>>454207

8 аргументов это конечно плохо. делают так.

$student = new Student;
$student->name = 'Ivan';

или

$student = new Student;
$student->setName('Ivan');
#836 #454215
>>454207

И я не понимаю, зачем ты в Студента передаешь pdo? урок про работу с БД читал? https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
#837 #454223
>>454215
Сейчас прочитал, спасибо, кажется понял как правильно делать, до этого приходилось придумывать, у меня вот такая верхушка класса была:

class Student {

public $yearBorn;
public $site;
public $pol;
public $pdo; public $name;
public $lastname;
public $groupNumber;
public $email;
public $point;

function __construct($name, $lastname, $groupNumber, $email, $point, $yearBorn, $site, $pol, $pdo) {
$this->name = $name;
$this->lastname = $lastname;
$this->groupNumber = $groupNumber;
$this->email = $email;
$this->point = $point;
$this->yearBorn = $yearBorn;
$this->site = $site;
$this->pol = $pol;
$this->pdo = $pdo;
}\t

Не знал как по другому использовать базу данных внутри класса, приходилось передавать через __construct объект PDO из вне, так совсем неверно да? Теперь то буду пользоваться дата мапером.
#837 #454223
>>454215
Сейчас прочитал, спасибо, кажется понял как правильно делать, до этого приходилось придумывать, у меня вот такая верхушка класса была:

class Student {

public $yearBorn;
public $site;
public $pol;
public $pdo; public $name;
public $lastname;
public $groupNumber;
public $email;
public $point;

function __construct($name, $lastname, $groupNumber, $email, $point, $yearBorn, $site, $pol, $pdo) {
$this->name = $name;
$this->lastname = $lastname;
$this->groupNumber = $groupNumber;
$this->email = $email;
$this->point = $point;
$this->yearBorn = $yearBorn;
$this->site = $site;
$this->pol = $pol;
$this->pdo = $pdo;
}\t

Не знал как по другому использовать базу данных внутри класса, приходилось передавать через __construct объект PDO из вне, так совсем неверно да? Теперь то буду пользоваться дата мапером.
#838 #454224
>>454223
Извиняюсь в приведенном коде кое-что съехало, у меня мышка продавленная, свойства местами поменялись, но кажется суть видна.
#839 #454371
>>454204-кун на связи
не могу понять в чем таблы, постоянно выдает более 2-3 ошибок, анон в чем проблема может быть? http://ideone.com/e7C9ea
#840 #454375
>>454371
Кавычки ты не закрыл в 11 ой строке.
#841 #454376
>>454371
А ещё ты скобки забыл.
#842 #454394
>>454371

> $compSun


> $compSum

#843 #454438
Простите господа, но есть какие нибудь годные уроки.туторы по битриксу кроме документации? Хочу войти в курс дела перед работой.
#844 #454528
Ребят, подскажите, как авторизацию/регистрацию запилить правильно.
40 Кб, 600x242
#845 #454542
Привет. Нужна помощь.
У меня есть таблица (смотри пик) цен на услуги полиграфической компании. Скажем, печать визиток. Задача состоит в том, чтоб сделать систему, где клиент нажимает на цену (синего цвета) и получает попап со строкой-подтверждением. Строка составляется из данных таблицы.

К примеру: мне нужно 500 визиток с Опцией #1.

Я нажимаю на цену 740 и в модальном окне у меня появляется строка: "Вы купили 500 визиток с Опцией #1 по цене 700 денег.

Можно вручную прописать все варианты типа (row-1, cell-5) + (row-3, cell-1) + (row-3, cell-5), но это же неправильно, хотя логика верна.

Таблица и модальное окно у меня уже реализовано. Все данные в таблице вынесены как параметры в бэк-энд. Мне нужна помощь с комбинацией значений. Как это решить на php?

Заранее благодарен.
#846 #454544
>>454438
Выходишь на улицу, ищешь самую грязную лужу. Срёшь в неё. Раздеваешься, катаешься в этой луже, потом выпиваешь из нее всё до конца.

Подготовка окончена.
#847 #454559
>>454544
кушать то же хочется
Макет #848 #454561
https://github.com/MindiMakridi/HTML-model я знаю, подсветка соц-сетей выглядит уродливо, другого способа как-то выделить их я не придумал.
129 Кб, 528x832
#849 #454576
требование к php программисту в моем мухосранске
#850 #454585
>>454002
>>454107
Ваше благородство не знает границ, а интеллект - систем подсчёта.
Сделал как сказал всесветлейший Оп Знаю, что скорее всего не так, но попытаться стоит, т.е.:
1) Задал переменные.
2) Начал цикл.
3) Внутри цикла подсчитал долг.
4) Открыл иф: Если долг меньше чем 5(пять) тыс. (тысяч), то приравниваю ежемесячный платёж = долг, вывожу, с меня хватит и брейк. Ежели нет, то плачу ежемесячный платёж. А ежемесячный платёж у меня сколько? Пять тысяч. уже с ума схожу.
Так вот. Где мой ограниченный стенками черепа разум допустим ошибку или проглядел очевидные для магистров оккультного цифрового знания вещи? На горохе уже постоял, плоть укротил, жду ответа.
http://ideone.com/9KW1LY
#851 #454588
>>454585

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


В формуле расчета. Точнее это не твой разум, это хитрый оп там её оставил. Выплачивать долг, а затем проверять оставшуюся к выплате сумму - противоречит логике. Нужно делать наоборот. Но для этого придется разбить формулу на части.
#852 #454592
>>454588
Спасибо за этот туманный и загадочный ответ, мессир. Буду ломать голову, если нихуя не выйдет - за советом приду только завтра, чтобы не примелькаться.
#853 #454594
>>454592
Да не особо он и туманный, вот тебе алгоритм действий:

Начисляем проценты к кредиту (НО ни в коем случае от него ничего не отнимаем)
Проверяем не меньше ли кредит нашей ежемесячной выплаты. Ну а далее в зависимости от проверки отнимаем что-то от оставшейся суммы кредита. Все просто, осталось только выразить это в коде.
#854 #454612
>>454576
Видимо ищут того, кто подходит хоть по одному из этих пунктов. И зарплата поди соответствующая, 20-30к.
#855 #454660
>>454594
Спасибо тебе, медиум сетевой сферы! Так долго не отвечал потому что смотрел менталиста по тв3.
http://ideone.com/FIohrE
Я ещё у Опа хотел спросить, когда думал, что получится сделать его способом, почему именно такая логика, потому что это правда странно. Но Оп - педагогический гений и его пути неисповедимы, аминь
#856 #454676
>>454660

>Я ещё у Опа хотел спросить, когда думал, что получится сделать его способом, почему именно такая логика, потому что это правда странно.



Если ты про это замечание >>454002 , то ты именно так и сделал.
Сосчитал проценты -> определил в условиях остаток долга -> выплатил нужную сумму.
#857 #454683
Лиличка:
http://ideone.com/UrlLuq

Считалка:
http://ideone.com/WwRT56
Проверти плиз.

И подскажите как решить задачку про банкомат усложнением с купюрами по 200 р и 2000 р?
#858 #454687
>>454683
Выглядит круто, ты явно умнее меня.
#859 #454690
>>453544

>Это лучше вынести из департамента. А то у тебя нельзя просто создать объект работника и добавить в департамент. Лучше сделать функцию вида



>addEmployee(Employee $employee)



Мне тогда нужно перекроить по новой два класса? Суть в том, что у меня все неправильно с точки зрения ООП сделано как раз? Я должен делать каждый класс независимым? Я просто не хотел делать для каждого класса работника функцию добавления этого работника, а хотел вот таким вот трюком сразу заполнять большие департаменты.
Я вообще немного не понял что тут должно быть: addEmployee(Employee $employee)
что тут в скобках типа передается? Это такой тайпхинтинг просто? что в функцию долден передаваться уже готовый объект?
#860 #454693
>>454528
Бамп.
#861 #454694
>>454693
я думаю с помощью фреймворка современного.
#862 #454708
>>454050

> лучше использовать древний проверенный способ. Когда имя для скачивания указывается в конце URL


ОП, я тупой я не понялхотя старался.

файлы решил сохранять не под именем-белибердой. А просто приписывать к имени файла номер id. Вот так 23_picture.jpg

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

Ты советовал.

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


Поделись ссылкой где про это написано так, что б даже я смог уловить суть.
#863 #454714
>>454676
Так я тоже неимоверно благодарен, просто когда ты дал мне это замечание я не понимал что значит "платить" здесь. Здесь забавный момент, вот ты мне сказал это, потом в другом посте Оп примерно то же самое сказал (Хотя я запутался, кто здесь кто, но не важно). Я сижу и думаю "где здесь "плата?". Здесь нет ничего с табличкой "Плата". И я, внимание, прихожу к выводу: "Так плата то это зачисление в PlaymentTotal!". Т.е. думаю что когда я добавляю число в общий платёж и он выводится в stdout то это "Плата". ЛОГИЧНО? Лол.
И только вот сегодня я понял что платёж это именно вычет ежемесячный платы и более того - нужно платить в каждом отдельном ифе по разному.
Такие дела. Ещё раз всем спасибо.
#864 #454724
>>454694
Не, надо руками. Я же не прошу все мне по полочкам расписать, направьте, куда копать и смотреть чего. У ОПа есть что по этой части?
#865 #454743
Аноны, решил изучать PHP, до этого с программирование вообще дел не имел, отсюда вопрос - с чего начать (ну чтоб прям вообще с нуля)
#866 #454745
>>454743
С шапки, например.
#867 #454747
>>454745
Я тупой, не понимаю в эти задачки, дошел до 3-4 и всё, код как-бы нормальный сам по себе, но работает через раз, и то не всё. вот думаю почитать что-то, чтобы заработало всё.
#868 #454755
>>454747

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

#869 #454758
>>454747

Выкладывай решения на проверку и получишь советы и замечания. Также, если ты не можешь решить задачу, запости ссылку на уже написанный код и напиши что именно непонятно —получишь подсказку.
#870 #454769
Почему в ДС нет нормальных вакансий php-джунов? Одни йоба-битриксы.
Такое положение дел меня огорчает.
#871 #454776
>>454223

> Не знал как по другому использовать базу данных внутри класса, приходилось передавать через __construct объект PDO из вне, так совсем неверно да?



В этом ничего неверного нет. Непонятно только зачем ты PDO в класс Student передаешь. зачем этому классу доступ к БД? Ты прочитал про паттерны для работы с Бд по ссылке?

>>454371

У тебя там условие выигрыша странное:

> if (($anonSum < 5) && ($compSum > 5)) {


> echo "ПК выиграл!";


А если у анона 2 очка, а у ПК 3 очка, то получается никто не выиграл?

По моему условие должно быть в виде «если у компьютера больше очков чем у человека».

>>454438

А чем документация плоха? Не знаю, попробуй погуглить.

>>454528

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

Регистрация: добавление пользователя в базу данных
Авторизация: проверка логина/пароля на наличие в БД и если так, помечаем пользователя залогиненным с помощью сессии или кук. Стоит помнить что сессия это временное хранилище и неактивная сессия умирает через 20-30 минут. Если ты хочешь чтобы залогиненность сохранялась дольше надо либо использовать куки либо сессию+ куки. из которых она восстанавливается.

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

http://www.internet-technologies.ru/articles/article_2077.html (тут плохой и устаревший код но идею понять можно)
http://habrahabr.ru/post/13726/ (используется устаревшее расширение mysql и код отстойный но идею понять можно. Привязку к IP лучше не делать так как есть динамический IP и будет постоянно разлогинивать)
http://lezhenkin.ru/examples/php/reg-auth-users/ (используется устаревший mysql, хотя в остальном код не плох)
http://programmer-weekdays.ru/archives/125

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

также есть уже готовые библиотеки для реализации логина, например Sentry (хотя у меня некоторые претензии к примерам кода там и статические методы это не лучшая идея): http://www.ibm.com/developerworks/ru/library/se-sentry/
#871 #454776
>>454223

> Не знал как по другому использовать базу данных внутри класса, приходилось передавать через __construct объект PDO из вне, так совсем неверно да?



В этом ничего неверного нет. Непонятно только зачем ты PDO в класс Student передаешь. зачем этому классу доступ к БД? Ты прочитал про паттерны для работы с Бд по ссылке?

>>454371

У тебя там условие выигрыша странное:

> if (($anonSum < 5) && ($compSum > 5)) {


> echo "ПК выиграл!";


А если у анона 2 очка, а у ПК 3 очка, то получается никто не выиграл?

По моему условие должно быть в виде «если у компьютера больше очков чем у человека».

>>454438

А чем документация плоха? Не знаю, попробуй погуглить.

>>454528

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

Регистрация: добавление пользователя в базу данных
Авторизация: проверка логина/пароля на наличие в БД и если так, помечаем пользователя залогиненным с помощью сессии или кук. Стоит помнить что сессия это временное хранилище и неактивная сессия умирает через 20-30 минут. Если ты хочешь чтобы залогиненность сохранялась дольше надо либо использовать куки либо сессию+ куки. из которых она восстанавливается.

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

http://www.internet-technologies.ru/articles/article_2077.html (тут плохой и устаревший код но идею понять можно)
http://habrahabr.ru/post/13726/ (используется устаревшее расширение mysql и код отстойный но идею понять можно. Привязку к IP лучше не делать так как есть динамический IP и будет постоянно разлогинивать)
http://lezhenkin.ru/examples/php/reg-auth-users/ (используется устаревший mysql, хотя в остальном код не плох)
http://programmer-weekdays.ru/archives/125

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

также есть уже готовые библиотеки для реализации логина, например Sentry (хотя у меня некоторые претензии к примерам кода там и статические методы это не лучшая идея): http://www.ibm.com/developerworks/ru/library/se-sentry/
340 Кб, 1200x2358
111 Кб, 1080x654
#872 #454778
>>454542

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

Решить можно помещением цен из таблицы в массив и нехитрым скриптом суммирующим нужные значения. Я не очень понимаю, в чем проблема, потому если тебе что-то непонятно, напиши подробнее. Я также предполагаю что ты знаешь сам язык PHP и тебе не надо объяснять что такое массивы, циклы, if, функции и т.д.

>>454561

Ты кстати знаешь что с помощью Github pages ты мог бы отобразить страницу с твоей версткой? Надо просто закоммитить файлы в ветку gh-pages и может что-то еще нажать в настройках репозитория: https://pages.github.com/

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

Ты должен пользоваться инструментами вроде линейки в графическом редакторе, чтобы измерить размеры блоков и отступы. А при верстке правильно расставлять маргины и падинги и помнить про схлопывание отступов (margin collapsing).

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

Также, видно что вес некоторых надписей не соответствует макету. Например, digital&branding agency based сделано шрифтом с весом около 300, но у тебя весом 300 сделана только курсивная надпись digital&branding. Почему? Очевидно потому что ты подключил к странице только шрифт весом 400 и 300 italic.

Веса шрифта можно увидеть например тут: https://www.google.com/fonts/specimen/Lato (заодно отмечу что пейринги Гугл подбирает неудачные: ну кто додумается использовать рядом похожие Lato и OpenSans?)

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

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

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

Опять же смотри картинку.

Это все надо исправить. Если есть какие-то затруднения или что-то непонятно, спрашивай.
340 Кб, 1200x2358
111 Кб, 1080x654
#872 #454778
>>454542

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

Решить можно помещением цен из таблицы в массив и нехитрым скриптом суммирующим нужные значения. Я не очень понимаю, в чем проблема, потому если тебе что-то непонятно, напиши подробнее. Я также предполагаю что ты знаешь сам язык PHP и тебе не надо объяснять что такое массивы, циклы, if, функции и т.д.

>>454561

Ты кстати знаешь что с помощью Github pages ты мог бы отобразить страницу с твоей версткой? Надо просто закоммитить файлы в ветку gh-pages и может что-то еще нажать в настройках репозитория: https://pages.github.com/

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

Ты должен пользоваться инструментами вроде линейки в графическом редакторе, чтобы измерить размеры блоков и отступы. А при верстке правильно расставлять маргины и падинги и помнить про схлопывание отступов (margin collapsing).

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

Также, видно что вес некоторых надписей не соответствует макету. Например, digital&branding agency based сделано шрифтом с весом около 300, но у тебя весом 300 сделана только курсивная надпись digital&branding. Почему? Очевидно потому что ты подключил к странице только шрифт весом 400 и 300 italic.

Веса шрифта можно увидеть например тут: https://www.google.com/fonts/specimen/Lato (заодно отмечу что пейринги Гугл подбирает неудачные: ну кто додумается использовать рядом похожие Lato и OpenSans?)

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

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

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

Опять же смотри картинку.

Это все надо исправить. Если есть какие-то затруднения или что-то непонятно, спрашивай.
#873 #454780
>>454561

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

Также, когда ты делаешь спрайт, не надо ставить картинки вплотную. Оставляй 5-10px промежутка. Иначе при масштабировании страницы из-за округлений вылезт края соседней картинки.

Теперь про эффекты. Их можно делать как в графическом редакторе, так и средствами CSS. Ну например ты бы мог рисовать круг за счет border-radius (а на картинке оставить только значок) и с помощью CSS затемнять/осветлять цвет при наведении. Можно с помощью box-shadow делать свечение вокруг при наведении. Можно смещать картинку или поворачивать на некоторй угол. Можно так же за счет переходов CSS3 transition сделать это плавным.

Вот примеры для вдохновения:

http://ianlunn.github.io/Hover/
http://tympanus.net/Development/CreativeButtons/
http://tympanus.net/Development/IconHoverEffects/
http://www.sanwebe.com/2014/02/css3-buttons-examples-with-effects-animations
http://tympanus.net/Tutorials/OriginalHoverEffects/index.html
http://tympanus.net/Tutorials/CircleHoverEffects/index.html
http://www.inserthtml.com/demos/css/button-styles/
http://www.cssdesignawards.com/articles/round-up-38-neat-css-js-hover-effects/101/

Ну и кнопку See Portflio надо сделать реагирующей на наведение.
#874 #454781
>>454576

Это требования к администратору. Слова php там нет.

>>454585

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


А должно быть 61к. Это из-за того что ты вот тут

> $creditBalance = ($creditBalance $percent) + $servicePayment - $monthlyPayment;


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

>>454592

Он имеет в виду строчку

$creditBalance = ($creditBalance
$percent) + $servicePayment - $monthlyPayment;

лучше не брать код из учебника с ошибкой, а писать самому.

>>454660

Считает правильно, но давай посмотрим внимательно на код. Безупречен ли он? Нет ли в нем повторов? Нельзя ли отрезать от него лишнее? Конечно, можно. Смотри сам, эти строки повторяются:

> $paymentTotal = ($paymentTotal + $monthlyPayment);


> $creditBalance = ($creditBalance - $monthlyPayment);


> echo "{$month} месяц спустя: долг = {$creditBalance} руб



Твоя работа пока не закончена. Отсеки лишнее. Избавься от повторов.

>>454714

О, действительно. мой совет мог быть не очень понятным. Под «платить» я имею в виду конечно уменьшение остатка долга, увеличение общей суммы выплаченного и вывод надписи.
#874 #454781
>>454576

Это требования к администратору. Слова php там нет.

>>454585

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


А должно быть 61к. Это из-за того что ты вот тут

> $creditBalance = ($creditBalance $percent) + $servicePayment - $monthlyPayment;


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

>>454592

Он имеет в виду строчку

$creditBalance = ($creditBalance
$percent) + $servicePayment - $monthlyPayment;

лучше не брать код из учебника с ошибкой, а писать самому.

>>454660

Считает правильно, но давай посмотрим внимательно на код. Безупречен ли он? Нет ли в нем повторов? Нельзя ли отрезать от него лишнее? Конечно, можно. Смотри сам, эти строки повторяются:

> $paymentTotal = ($paymentTotal + $monthlyPayment);


> $creditBalance = ($creditBalance - $monthlyPayment);


> echo "{$month} месяц спустя: долг = {$creditBalance} руб



Твоя работа пока не закончена. Отсеки лишнее. Избавься от повторов.

>>454714

О, действительно. мой совет мог быть не очень понятным. Под «платить» я имею в виду конечно уменьшение остатка долга, увеличение общей суммы выплаченного и вывод надписи.
#875 #454782
>>454683

Лиличка

Работает верно, но код требует улучшений.

нахождение максимальной длины можно сделать без цикла за счет функции array_map и max.

> for ($i = 1; $i <= $bigLengthString; $i++)


Лучше считать от 0 чтобы не приходилось потом вычитать 1

> $arrayChars = preg_split("//u",$string); // Разбираем строку на символы


Я думаю тут проще использовать mb_substr (для проверки не вышли ли мы за границу строки можно использовать mb_strlen)

Считалка

Код можно упростить. У тебя 2 цикла:

пока участников много {
пока мы не дошли до конца круга {
удаляем участинка;
}
поправляем значения;
}

Но можно записать его так:

пока участников много {
удаляем участника;
если (вышли за конец круга) {
подправляем значения переменных;
}
}

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

Для перенумеровки массива лучше использовать не sort а специально для этого сделанный array_values.
#875 #454782
>>454683

Лиличка

Работает верно, но код требует улучшений.

нахождение максимальной длины можно сделать без цикла за счет функции array_map и max.

> for ($i = 1; $i <= $bigLengthString; $i++)


Лучше считать от 0 чтобы не приходилось потом вычитать 1

> $arrayChars = preg_split("//u",$string); // Разбираем строку на символы


Я думаю тут проще использовать mb_substr (для проверки не вышли ли мы за границу строки можно использовать mb_strlen)

Считалка

Код можно упростить. У тебя 2 цикла:

пока участников много {
пока мы не дошли до конца круга {
удаляем участинка;
}
поправляем значения;
}

Но можно записать его так:

пока участников много {
удаляем участника;
если (вышли за конец круга) {
подправляем значения переменных;
}
}

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

Для перенумеровки массива лучше использовать не sort а специально для этого сделанный array_values.
#876 #454783
>>454683

> как решить задачку про банкомат усложнением с купюрами по 200 р и 2000 р?


Это задача о ранце и у нее есть известный алгоритм решения:

http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE_.D1.80.D0.B0.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5

https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D0%BD%D1%86%D0%B5

http://informatics.mccme.ru/mod/book/view.php?id=815

http://algoritm-rukzaka.narod.ru/

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

Допустим есть сумма 16000. Чтобы определить как ее выдать мы должны перебрать все возможные количества купюр:

5000-е: от 0 до 3 (с учетом имеющегося запаса)
2000-е: от 0 до 8 (с учетом запаса и числа более старших)
...
100-е: от 0 до 160 (с учетом запаса и числа более старших)

«С учетом запаса» значит что если у нас всего одна 5000-я то рассматривать варианты размена где две или три таких купюры нет смысла.

«с учетом более старщих» значит что если мы допустим проверяем вариант в котором 3 5000-х купюры, то число 100-х меняется только от 0 до 10.

Полный перебор значит что мы должны проверять все возможные комбинации числа купюр. С учетом запаса и с учетом общей суммы разумеется.

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

перебор_5000х (сумма, запас) {
для количества от 0 до минимального из (запас 5000-х, сумма / 5000) {
делаем перебор 2000х(остаток суммы, запас);
}
}

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

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

Если что задавай вопросы.
#876 #454783
>>454683

> как решить задачку про банкомат усложнением с купюрами по 200 р и 2000 р?


Это задача о ранце и у нее есть известный алгоритм решения:

http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE_.D1.80.D0.B0.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5

https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D0%BD%D1%86%D0%B5

http://informatics.mccme.ru/mod/book/view.php?id=815

http://algoritm-rukzaka.narod.ru/

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

Допустим есть сумма 16000. Чтобы определить как ее выдать мы должны перебрать все возможные количества купюр:

5000-е: от 0 до 3 (с учетом имеющегося запаса)
2000-е: от 0 до 8 (с учетом запаса и числа более старших)
...
100-е: от 0 до 160 (с учетом запаса и числа более старших)

«С учетом запаса» значит что если у нас всего одна 5000-я то рассматривать варианты размена где две или три таких купюры нет смысла.

«с учетом более старщих» значит что если мы допустим проверяем вариант в котором 3 5000-х купюры, то число 100-х меняется только от 0 до 10.

Полный перебор значит что мы должны проверять все возможные комбинации числа купюр. С учетом запаса и с учетом общей суммы разумеется.

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

перебор_5000х (сумма, запас) {
для количества от 0 до минимального из (запас 5000-х, сумма / 5000) {
делаем перебор 2000х(остаток суммы, запас);
}
}

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

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

Если что задавай вопросы.
#877 #454785
>>454690

> Мне тогда нужно перекроить по новой два класса?


Скорее всего да

> Суть в том, что у меня все неправильно с точки зрения ООП сделано как раз?


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

А так у меня есть объект-работник, как добавить его в Департамент? Никак. Плохо.

> Я должен делать каждый класс независимым?


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

> Я просто не хотел делать для каждого класса работника функцию добавления этого работника


Зачем? Сделай одну функцию добавляющую работника любого класса в департамент:

$dep->addEmployee(Employee $employee)

> Это такой тайпхинтинг просто?


да

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

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


да
#877 #454785
>>454690

> Мне тогда нужно перекроить по новой два класса?


Скорее всего да

> Суть в том, что у меня все неправильно с точки зрения ООП сделано как раз?


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

А так у меня есть объект-работник, как добавить его в Департамент? Никак. Плохо.

> Я должен делать каждый класс независимым?


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

> Я просто не хотел делать для каждого класса работника функцию добавления этого работника


Зачем? Сделай одну функцию добавляющую работника любого класса в департамент:

$dep->addEmployee(Employee $employee)

> Это такой тайпхинтинг просто?


да

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

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


да
#878 #454786
>>454708

> я не понял


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

http://example.com/files/123/hello.world

и по этому URL отдается файл то браузер сохранит его с именем hello.world

Если мы возьмем какой-нибудь файл на rghost, например http://rghost.ru/6vZkZdKVM и посмотрим инспектором (Ctrl + Shift + i) код кнопки «скачать» то мы увидим:

<a href="http://rghost.ru/download/6vZkZdKVM/78d35a45b6f25989133d9a145f11f82e2827faab/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%BE%D1%82%202015-03-25%2007:03:10.png" class="btn large download js-download-link-update" data-update-url="/files/6vZkZdKVM/link" rel="nofollow" title="Скачать Снимок экрана от 2015-03-25 07:03:10.png">Скачать</a>

Адрес в href закодирован процентным кодированием ( https://ru.wikipedia.org/wiki/URL#.D0.9A.D0.BE.D0.B4.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_URL ). Если мы его раскодируем (например тут http://www.codenet.ru/services/urlencode-urldecode/ ), то получим

http://rghost.ru/download/6vZkZdKVM/78d35a45b6f25989133d9a145f11f82e2827faab/Снимок экрана от 2015-03-25 07:03:10.png

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

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

> А просто приписывать к имени файла номер id. Вот так 23_picture.jpg


В этом случае php файл остается php файлом — довольно опасно.

> Закачиваю файл с русским именем, имя превращается в кракозябры.


На windows файловые функции ждут имя файла не в utf-8 а в win-1251. надо либо перекодировать (причем только под windows) либо использовать только латинницу.

> При попытке скачивать ничего не происходит


Как выглядит ссылка? Что пишет отладчик в браузере на вкладке network?

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


Я выше привел примеры. Если что-то непонятно, уточняй. Если кратко то надо чтобы ссылка скачивания файла закнчивалась его именем.
#878 #454786
>>454708

> я не понял


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

http://example.com/files/123/hello.world

и по этому URL отдается файл то браузер сохранит его с именем hello.world

Если мы возьмем какой-нибудь файл на rghost, например http://rghost.ru/6vZkZdKVM и посмотрим инспектором (Ctrl + Shift + i) код кнопки «скачать» то мы увидим:

<a href="http://rghost.ru/download/6vZkZdKVM/78d35a45b6f25989133d9a145f11f82e2827faab/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%BE%D1%82%202015-03-25%2007:03:10.png" class="btn large download js-download-link-update" data-update-url="/files/6vZkZdKVM/link" rel="nofollow" title="Скачать Снимок экрана от 2015-03-25 07:03:10.png">Скачать</a>

Адрес в href закодирован процентным кодированием ( https://ru.wikipedia.org/wiki/URL#.D0.9A.D0.BE.D0.B4.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_URL ). Если мы его раскодируем (например тут http://www.codenet.ru/services/urlencode-urldecode/ ), то получим

http://rghost.ru/download/6vZkZdKVM/78d35a45b6f25989133d9a145f11f82e2827faab/Снимок экрана от 2015-03-25 07:03:10.png

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

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

> А просто приписывать к имени файла номер id. Вот так 23_picture.jpg


В этом случае php файл остается php файлом — довольно опасно.

> Закачиваю файл с русским именем, имя превращается в кракозябры.


На windows файловые функции ждут имя файла не в utf-8 а в win-1251. надо либо перекодировать (причем только под windows) либо использовать только латинницу.

> При попытке скачивать ничего не происходит


Как выглядит ссылка? Что пишет отладчик в браузере на вкладке network?

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


Я выше привел примеры. Если что-то непонятно, уточняй. Если кратко то надо чтобы ссылка скачивания файла закнчивалась его именем.
#879 #454787
>>454724

написал тут >>454776

>>454743

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

>>454747

выложи свои решения и я прокомментирую и дам советы.

>>454769

Не знаю.
ОП #880 #454791
Этот тред закрыт (уф, почти 900 постов, что же вы творите). Переходите в новый тред: >>454789
7 Кб, 219x301
#881 #454849
>>454778
Я не могу понять, что это за белый отступ справа и что с ним делать. Указывать width 100% для каждого блока? Тогда блоки будут выходить за пределы экрана.

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


>У тебя ничего не тянется.


А как же media правило для services? Надо как-то по другому делать?
#882 #461555
А есть где-нибудь прошлый тред?
Тред утонул или удален.
Это копия, сохраненная 12 апреля 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски