«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/09/20 19:05:43  №1267370 1
Ответы: >>1269793
Аноним 2018/09/20 19:32:39  №1267386 2
Задача "Опечаточник" по госконтрактам (одновременное выделение в квадратные скобки+замена англ на рус)
https://ideone.com/3M9637

Возник следующий вопрос.
Здесь я для того, чтобы проверять букву в большом и малом регистре сделал пару из заглавной и прописной в массиве 'O'=>'O','o'=>'о'.

В JS я бы решил этот момент через колбэк в реплейс типа такого

string.replace(/'[Oo]'/gi, x=> x==x.toLowerCase()?'русская о':'руccкая О');

Как в пыхе решать такие ситуации без создания пар выборов в объекте, массиве, а на стадии матча, в зависимости от матча, на лету?
Ответы: >>1267873 >>1269793
Аноним 2018/09/21 09:40:45  №1267640 3
Анчоусы а стоит ли перекатыватся на линукс или нет, раз кодите на пыхе? Какую ОС вы юзайте?
Аноним 2018/09/21 11:06:36  №1267703 4
>>1267640
Планирую перекатиться, ибо за винду кмк могут не взять на работу особо упоротые ЖМУПИНУСЫ.

Хоть и не вижу ничего плохого в попенцорсе перспектива тратить время ЕЩЕ И НА ЭТО удручает. С другой стороны мб освою быстро.
Ответы: >>1269793
Аноним 2018/09/21 13:52:56  №1267805 5
Оп, а почему ты советуешь учить паттерны после выполнения заданий, в которых, по хорошему, надо использовать некоторые паттерны?
Ответы: >>1269793
Аноним 2018/09/23 05:08:46  №1268596 6
Аноны, сколько разы можно юзать знак ? в URL'e страницы?
Ответы: >>1268609 >>1269790
Аноним 2018/09/23 08:19:03  №1268697 7
maxresd.jpg (156, 1280x720)
720x1280
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end

Ответы: >>1268731 >>1269790
Аноним 2018/09/23 09:18:59  №1268731 8
>>1268697
Эти задачи решались 1000 раз, попробуй загуглить примеры по названиям функций/комментариям/ключевым словам. В гугле не забудь добавить приставку site:ideone.com, если ничего не нашлось пробуй без неё.
Ответы: >>1269790
Аноним 2018/09/23 13:44:46  №1268987 9
maxresd.jpg (156, 1280x720)
720x1280
Дублирую из предыдущего треда.
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end
Ответы: >>1268996
Аноним 2018/09/24 18:00:14  №1269712 10
error.png (6, 1173x86)
86x1173
Как отправлять сообщения в телегу? Не пойму в чем ошибка.
Допустим я хочу чтобы бот оправил сообщение в конфу.
$send = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}
&parse_mode=html&text={$txt}","r");
Выдает ошибку. Хелпаните ньюфагу.
Ответы: >>1269962
Аноним 2018/09/24 22:25:06  №1269790 11
ОП не пропал, просто сейчас мало времени и много работы. Думаю, это временно (как и большинство вещей в жизни).

>>1268731

Искать лучше в архиве тредов: phpclub.tech

>>1268697
>>1268987

> 1) Граммар нази.
Лучше было бы не переделывать регулярки программно, а сразу написать их в нужном виде. Это облегчит восприятие кода и не надо будет его разбирать, чтобы понять, как они трансформируются.

Читать выражения вроде $rule[2] не очень удобно, потому массив можно разобрать на переменные вручную или конструкцией list:

list($regexp, $replace, $comment) = $rule;

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

А так, сделано хорошо.

> 2) Опечаточники.

Конечно, в слове может быть несколько замененных букв, почему нет?

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

Готового примера решения нет, другие решения можно поискать на phpclub.tech, там есть поиск.

>>1268596

Это из тестового задания? Теоретически, много. Почитай урок про структуру URL: https://github.com/codedokode/pasta/blob/master/network/urls.md

Знак вопроса впоне может встретиться в query string и в якоре неограниченное число раз. Однако, в некоторых случаях длина URL может быть ограничена браузером или веб-сервер может отказаться принимать слишком длинный URL. Например, апач в конфигурации по умолчанию, если не путаю, имеет лимит в районе 2000 байт.
Ответы: >>1269803
Аноним 2018/09/24 22:26:12  №1269793 12
>>1267386

> Задача "Опечаточник"
Для замены тут не требуются регулярки, можно было использовать strtr() с массивом. Также, ты ищешь только латинские буквы, но надо искать слова из букв разных алфавитов. Проще всего сделать так: разбить текст на слова и для каждого слова определить язык первой буквы и проверить наличие букв другого алфавита.

Ну или сделать регулярку, ищущую слова из букв разных алфавитов.

> Здесь я для того, чтобы проверять букву в большом и малом регистре сделал пару из заглавной и прописной в массиве 'O'=>'O','o'=>'о'.

Тут проще всего так, потому что маленькие и большие буквы не эквивалетны. Латинская H похожа на букву кириллицы, а h - уже нет. Аналогично B/b - они похожи на буквы в/ь.

>>1267805

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

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

>>1267703

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

>>1267370

Для пользователей - не забудь про хеширование и соление паролей.

Идея хранить содержимое теста в виде JSON мне не очень нравится, так как не будут работать внешние ключи (например, на выбранный вариант ответа) и не контролируется структура содержимого - а это значит, там быстро начнут накапливаться ошибки. Ну и структура никак не документирована, и глядя на базу, будет трудно ее разобрать.
Ответы: >>1269861
Аноним 2018/09/24 23:17:19  №1269803 13
В старом треде проверил посты с 20 сент. по сегодня: >>1269790 - зайдите и посмотрите, наверняка ваша задачка проверена.

Кстати, любопытная ссылка: правила выбора формы слова в зависимости от числа (1 человек, 2 человека, 5 человек) в разных языках: http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

Анон с TDG, интересная штука, попоробую посмотреть позже.
Аноним 2018/09/25 00:51:19  №1269810 14
>>1269803
https://ideone.com/Grtrs6
В который раз переделал задачу с текстовыми/числовыми вопросами. Проверьте, плз.

У меня возникли глупенькие вопросы.

1. Тайп-хинты на вход и выход, нужно стараться использовать везде где есть функции?

2. Как перехватить с помощью try-catch, ошибку возникшую из-за неправильно переданного типа? Заменить тайп-хинт на проверку внутри функции, которая будет выбрасывать исключение?

3. Решаю сейчас ООП-будильник, потом нужно будет решать Вектор или эти задачки взаимозаменяемые?
Ответы: >>1269863 >>1270393
Аноним 2018/09/25 07:30:17  №1269861 15
>>1269793
>>1269803
>Идея хранить содержимое теста в виде JSON мне не очень нравится, так как не будут работать внешние ключи (например, на выбранный вариант ответа) и не контролируется структура содержимого - а это значит, там быстро начнут накапливаться ошибки
Сами вопросы хранить в отдельной таблице( один(Тест) ко многому) и варианты ответа то же в отдельной таблице(один(Вопрос) ко многому)
Так что ли?
Ответы: >>1269864 >>1270393
Аноним 2018/09/25 09:39:46  №1269926 16
уныние.jpg (74, 1895x1048)
1048x1895
Мне надо сайты для бюро ритуальнных услуг делать.
Аноним 2018/09/25 10:04:50  №1269940 17
Котаны, помогите разобраться в ошибке применительно к этому сниппету:
https://ideone.com/NhFrF5

Ошибка:
>PHP Fatal error: Constant expression contains invalid operations in /home/Gc2l35/prog.php on line 4
Ответы: >>1269942 >>1270391
Аноним 2018/09/25 11:08:11  №1269962 18
>>1269712
Из-за ркн мой бот не хочет работать, как сделать так, чтобы бот отправлял сообщения через прокси?
Ответы: >>1270391
Аноним 2018/09/25 13:46:17  №1270046 19
уныние.jpg (122, 1891x1044)
1044x1891
Постраничную навигацию по таблице было интересно делать. А вот сортировку без жаваскрипа делать не охота.
Ответы: >>1270081 >>1270371
Аноним 2018/09/25 14:27:36  №1270081 20
>>1270046

Сортировка легко делается без JS: делаем заголовки колонок ссылками вида ...&sort=-name
Ответы: >>1270092
Аноним 2018/09/25 14:36:35  №1270092 21
>>1270081
Да это понятно, проблемы начинаются, когда при повторных нажатиях надо менять тип сортировки.
Ответы: >>1270133
Аноним 2018/09/25 15:32:04  №1270133 22
>>1270092

Нужно выводить ссылку с учетом текущего типа сортировки. То есть если выбрана сортировка -name, то надо выводить в заголовке +name вместо -name.
Ответы: >>1270146
Аноним 2018/09/25 15:42:43  №1270146 23
1468592852006.jpg (101, 1280x720)
720x1280
>>1270133
Слишком уж большой костыль выходит для такой мелочи.
Ответы: >>1270225 >>1270391
Аноним 2018/09/25 20:46:18  №1270324 24
Ответы: >>1270391
Аноним 2018/09/26 01:35:22  №1270391 25
>>1270324

> https://pastebin.com/EsM3d1e8

> return $op==='+'?$result+$number:($op==='-'?$result-$number:$result*$number);

Здесь лучше использовать блок if/elseif, так как длинное выражение трудно читать.

А так, хорошо, что ты вынес вычисление в функцию. Сделано верно.

>>1270146

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

>>1269962

Если ты используешь fopen (довольно странный выбор), то почитай про контексты потоков: http://php.net/manual/ru/stream.contexts.php

>>1269940

Можно указать значение по умолч. null и в функции сделать проверку:

function t($x = null)
{
if ($x === null) {
$x = ....;
}

...
}
Ответы: >>1270422
Аноним 2018/09/26 01:35:54  №1270393 26
>>1269926

Хороший повод получше освоить CSS. Формы можно делать так:

<div class="f-row">
<div class="f-label">...</div>
<div class="f-widget">...</div>
</div>

Выровнять f-label/f-widget горизонтально можно с помощью display: inline-block, float, display: table, flexbox, и наверно как-то еще. Не забудь предусмотреть область для показа ошибок.

>>1269861

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

>>1269810

> https://ideone.com/Grtrs6

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

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

> 2. Как перехватить с помощью try-catch, ошибку возникшую из-за неправильно переданного типа?

Вообще, при неправильном типе поведение зависит от версии PHP. Дело в том, что в PHP, кроме исключений, есть еще "ошибки": notice, warning, fatal error, которые не являются исключениями и не ловятся try/catch (но ловятся при желании специальным обработчиком ошибок). Они по умолчанию пишутся в лог, могут выводиться на экран, и могут завершать или не завершать скрипт (в зависимости от уровня ошибки). Информацию можно поискать тут: http://php.net/manual/ru/book.errorfunc.php

Немного про них написано тут: http://anton.shevchuk.name/php/php-for-beginners-error-handling/

Некоторые фреймворки просто преобразовывают их в исключения, как описано тут: http://php.net/manual/ru/class.errorexception.php

В PHP7 часть фатальных ошибок была заменена на выброс исключения.

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

> 3. Решаю сейчас ООП-будильник, потом нужно будет решать Вектор или эти задачки взаимозаменяемые?

Решай в любом порядке, но лучше решить обе. Вектор посложнее.
Ответы: >>1270422
Аноним 2018/09/26 04:55:27  №1270422 27
>>1270391
>как это аккуратно сделать
Яваскриптом.
>>1270393
>Не забудь предусмотреть область для показа ошибок
Ошибки во всплывающем окошке выводятся.