«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/04/17 11:49:34  №1999047 1
пук.jpg (51, 1080x531)
531x1080
Меня затрахали нерешаемые моим мозгом бонусные задачи из учебника, что делать?
Ответы: >>1999073 >>1999079
Аноним 2021/04/17 12:11:23  №1999073 2
>>1999047
Скорее всего ты чего-то недогнал в процессе обучения. Тут не работает как в школе\шараге и надо честно позадрачивать с недельку.
На чём всрался?
Ответы: >>1999103
Аноним 2021/04/17 12:13:26  №1999079 3
>>1999047

Ты можешь запостить свой код, и написать, что именно непонятно. Также, можно попробовать поискать решение задачи в гугле.
Ответы: >>1999103
Аноним 2021/04/17 12:29:36  №1999103 4
1522495958120494646.jpg (136, 1080x971)
971x1080
>>1999073
>>1999079
Да че я не догнал... Все задачи решил предыдущие, но если попросить здесь помощи по бонусным мне в сотый раз льют в уши кучу помоев, которые никак не помогают решить задачу.

https://ideone.com/kzN6Eh

Вот тут например, спросил как пофиксить задачу, сказали вместо ничего выводить пробел)0 Да я как бы и так знаю в чем проблема, а как это сделать нахуй?))) Очень информативно.

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

Я в центре на пикрелейтеде, inb4 я долбоеб неблагодарный и не ценю помощь, нахуй из треда


Ответы: >>1999380 >>1999639
Аноним 2021/04/17 19:26:34  №1999639 5
>>1999103

Ты ничего не переспросил в ответ на совет выводить пробел, вот тебе ничего больше и не посоветовали.

У тебя есть переменная $i, которая указывает, какую по счету букву надо взять из строки $value. Но некоторые строки слишком короткие и в них нет $i-й буквы. Надо проверять, что $i меньше чем длина $value (mb_strlen). Если это так, то берем одну букву из $value и добавляем в $letter. Если это не так ($i >= длины строки), то надо в $letter добавлять пробел.

Если с этим все стало понятно, то вот еще совет: у тебя используется рекурсия (функция abc вызывает саму себя). Можно заменить ее на цикл for, где $i меняется от 0 до максимальной длины строки стихотворения. Сейчас эта макс. длина у тебя вписана как 33, но лучше вычислять ее: разбить стих на строки, затем преобразовать массив строк в массив длин с помощью array_map, затем взять максимальную длину с помощью max().

> последовательный перебор

Это у многих вызывает сложность. Почему бы не попробовать начать с более простой подзадачи. Допустим, у нас есть всего 2 вида купюр - по 500 и по 100. Допустим, у тебя есть функция next(), и ей дается на вход 2 массива:

- первый массив - это общее количество купюр в банкомате вида [5, 2]. Это значит, что есть 5 купюр по 500 и 2 по 100.
- второй массив - это какая-то произвольная комбинация купюр, например [2, 1] то есть 2x500 + 1x100.

Функция должна вернуть следующую за данной комбинацию (в виде массива). Если ей дали 2x500 + 1x100, она должна вернуть 2x500 + 2x100 (то есть массив [2, 2]). Если ей дали 2x500 + 2x100, она должна вернуть 3x500 + 0x100 (так как 3 купюры по 100 быть не может).

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

Уточняй, если что непонятно.
Ответы: >>2000963 >>2002365
Аноним 2021/04/20 11:09:59  №2002365 6
>>1999639
>Функция должна вернуть следующую за данной комбинацию (в виде массива). Если ей дали 2x500 + 1x100, она должна вернуть 2x500 + 2x100 (то есть массив [2, 2]). Если ей дали 2x500 + 2x100, она должна вернуть 3x500 + 0x100 (так как 3 купюры по 100 быть не может).

https://ideone.com/KWu2kP

Ответы: >>2002397 >>2002413
Аноним 2021/04/20 11:52:52  №2002413 7
>>2002365

Начиная с PHP5.4, можно вместо array() писать [], это компактней.

Еще, вместо сравнения массивов по одному элементу, можно сравнивать массивы целиком с помощью == или ===, подробности (не очень подробные) в мануале: https://www.php.net/manual/ru/language.operators.array.php

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

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

Уточняй, если что непонятно.
Ответы: >>2003091 >>2003169
Аноним 2021/04/21 04:19:45  №2003144 8
Возможно я просто сонный и чего не догоняю но вот проблема, из бд мне возвращается ничего, а в ошибке пишет просто "Ошибка". Таблица точно есть, и данные в ней тоже, регистрацию то запилил а тут что не так может быть?
Ответы: >>2003294 >>2003694
Аноним 2021/04/21 05:26:13  №2003169 9
Ответы: >>2003294
Аноним 2021/04/21 07:01:37  №2003223 10
Аноны, по вашему совету сделал сохранение топа в файл путём сохранения топа в временный файл и потом его переименование в нужный файл чтобы не было коллизий когда файлы затирают друг-друга, и столкнулся с тем что рандомно в течении дня проихсодит такая фигня что временный файл не удаляется, он в основном с рандомным именем и весит 0 килобайт, но есть и файлы размером в половину или весь файл топа в пол мегабайта, почему это может быть что временный до переименования файл не удаляется и остаётся? Приходится писать скрипт и удалять эти файлы им, потому что у них стоят права -600, и руками по фтп они не удаляются
Ответы: >>2003297
Аноним 2021/04/21 08:45:35  №2003294 11
>>2003144

Функция mysqli_fetch_assoc может вернуть false, null или массив.

При ошибке на стороне БД фукнция вернет false. Надо проверять именно это условие (что вернулось false) и тогда выводить ошибку. А ты выдаешь ошибку даже если функция вернула null, хотя это значит, что данные в таблице не найдены. Это не ошибка базы данных, если например, логин введен неправильно.

>>2003169

Здесь плохо то, что весь код написан внутри одной функции. Лучше разделить код на несколько функций:

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

И наконец, отдельно можно написать код, который в цикле перебирает комбинации:

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

После этой задачи, если ты ее сделаешь, я советую попросить у меня дополнительные задачи на массивы и рекурсию.
Ответы: >>2003601 >>2003746
Аноним 2021/04/21 08:49:47  №2003297 12
>>2003223

> проихсодит такая фигня что временный файл не удаляется,

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

Смотри логи (на время, совпадающее со временем создания файла).

> почему это может быть что временный до переименования файл не удаляется и остаётся?

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

> потому что у них стоят права -600

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

Ответы: >>2003325
Аноним 2021/04/21 09:25:19  №2003325 13
>>2003297
>возможно из-за превышения времени выполнения или ограничения на объем памяти
Точно, скорее всего проблема в ограничении памяти, то сть на сайт заходит много человек и идёт превышение памяти от чего скрипт просто дропается, ошибки быть не может так как запись идёт в самом конце файла, логи к сожалению посмотреть не могу, хостинг не даёт, но скорее всего из-за перегруза оперативки, на деректории стоят права -755, но я всё равно не могу руками удалить эти временные файлы -600, только скриптом явно указав их имена
Ответы: >>2004276
Аноним 2021/04/21 09:51:46  №2003367 14
image.png (394, 500x500)
500x500
>>1998470 (OP)
Пиздец, сел за одну легаси-часть проекта которая была написана на похапэ, раньше к ней не притрагивался, сразу же ахуел
Там как-то эти сраные темплейты рендерятся пыхой через хуй-пизду, прямиком в темплейтах сидит жс (жкьюри) код, чтобы сделать элементарную операцию вроде захода посетителя на новую страницу проходит несколько php-запросов, которые высирают эти ебучие tpl... И вот это считалось считается нормой. Просто пиздец. Нахуя вы это делаете?
Ответы: >>2003383 >>2004276 >>2004467
Аноним 2021/04/21 14:06:26  №2003601 15
>>2003294
Хорошо, при проверке data на false результат тот же
Ответы: >>2003619 >>2003628
Аноним 2021/04/21 14:30:49  №2003628 16
>>2003601

Ты проверяешь через == или через ===? Потому что при использовании == (нестрогое сравнение) null будет равен false. Надо использовать ===.

Если функция вернула false, то будет указана причина ошибки. Если функция вернула null, то естественно ошибки нету.
Ответы: >>2003640
Аноним 2021/04/21 14:48:41  №2003640 17
>>2003628
При === возвращает null, данные то все равно не находит
Ответы: >>2004276
Аноним 2021/04/22 09:44:23  №2004276 18
>>2003325

> на деректории стоят права -755,
Ну так если ты не владелец директории, то для тебя права будут 5, то есть r-x, без права на запись (и удаление файлов).

>>2003640

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

>>2003367

Непонятно, в чем претензия? Шаблоны использовать плохо? Использовать JS код в шаблонах плохо?

Ну в том же реакте, например, в одном файле пишут и JS-код и похожую на HTML разметку. А вместо одного удобного шаблона там куча мелких компонентов - сиди разбирайся.
Аноним 2021/04/22 12:12:24  №2004466 19
>>2004276
>А вместо одного удобного шаблона
Сваленная в кучу верстка, стили, жс на несколько тысяч строк - удобный шаблон?
В таком шаблоне невозможно понять, где заканчивается один компонент и начинается другой.
Можно с тем же успехом код не разбивать по файлам