• Как изменять переменную каждый цикл?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это не нужно делать.
    "Переменная", имя которой может меняться в цикле - это индекс массива. Списка или коллекции.
    В данном случае a - это список, и обращаться к его элементам можно по индексам, a[1], a[2], и так далее

    Соответственно, код будет
    a = []
    i = 1
    while i <= 5:
      a[i] = i
      i += 1
    Ответ написан
    1 комментарий
  • Как изменить определённый элемент списка в цикле for?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну и для коллекции самый кондовый способ
    Надо, всё-таки, перед тем как использовать всякие enumerate, сначала понять как вообще работают циклы.
    i=0
    length = len(votes)
    while i < length:
        votes[i] = votes[i].replace(',', '')
        i += 1
    Ответ написан
    1 комментарий
  • Выходит ошибка с файлами что делать?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Указать правильный путь к файлу
    Ответ написан
    Комментировать
  • Как выбрать значение по наибольшему ключу из объекта json?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Традиционный ответ: Не хранить в JSON данные, которые для этого не предназначены.
    А хранить их нормально - в предназначенной для этого связанной таблице.
    Ответ написан
    Комментировать
  • Как правильно сделать запрос в бд?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я даже не представляю, сколько раз на этот запрос здесь уже отвечали. Но разве ж тут что найдёшь...
    WHERE date BETWEEN '2021-10-01 00:00:00' and '2021-10-30 23:59:59'
    Ответ написан
    8 комментариев
  • Как писать в csv в определенную колонку, а строки со второй?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не нужно искать решение специфической задачи "как писать в колонку".
    Это всё равно что отдельно искать в гугле ответы на вопросы "как есть борщ", "как есть солянку", "как есть щи".
    Надо освоить несколько базовых понятий, и уже применять их для решения неограниченного круга задач.
    В данном случае надо просто подумать - что такое файл, что такое csv файл, как можно организовать работу с несколькими колонками. А главное - понять, что файл всегда перезаписывается ЦЕЛИКОМ. То есть каждый скрипт должен писать все колонки, а не только свои.
    И всё получится сделать, самыми простыми средствами.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уж сколько раз твердили миру...
    На конференции к звездам надо приходить запросы надо выполнять подготовленными.
    А не вот это вот всё.
    Иначе проблемы с буквами покажутся детской щекоткой.
    Какой вообще смысл делать регистрацию, если любой школьник сможет войти под чужой учёткой вообще без пароля, через простейшую SQL инъекцию?

    Надо забыть про mysqli_query и освоить функции prepare(), bind_param(), и execute(). Причём не только для insert, но и для select тоже. Потому что через него можно будет повытаскивать все пароли. Поскольку они ещё и не захэшированы.
    Ответ написан
    Комментировать
  • Как вывести второе поле если первое пустое?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    или покороче,
    'name' => $result['short_name'] ?: $result['name'],
    Ответ написан
    1 комментарий
  • Не могу выполнить sql INSERT yii2 mssql, как правильно составить INSERT?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Селект внутри values может возвращать только одно значение. Не несколько колонок, не несколько строк, а значение одной колонки одной строки.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    4 комментария
  • Как составить логику бд и запроса?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо хотя бы что-то делать самому.
    Обычный inner join выберет только те продукты, который относятся к выбранной стране, и только те подкатегории, которые относятся к этим продуктам (при условии, что подкатегории как-то связаны с продукатми). Ничего "сложного" или каких-то хитрых запросов здесь не нужно.
    Вывести родительские категории чуть сложнее, но тоже надо сначала самому попытаться, а не просить чтобы написали целиком запрос.
    Ответ написан
  • Как решить проблему с созданием куки и возможные ошибки с авторизацией?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "В F12" надо смотреть не Cookie, а вкладку Network. Все куки, которые ставит сервер, пишутся в ответе сервера на запрос.
    Именно там надо смотреть, что за куки приходят.
    И там же, в запросах браузера, смотреть - какие куки он отправляет.

    В целом код какой-то странный, в части проверок под длинным комментарием.
    получается, что при первом логине, когда $result['hash'] пустой, он должен стирать все куки.
    при этом код удаления ставит куку id, а код проверки использует куку ID

    Для начала я бы проверил работу кук без всякой авторизации, просто выставлял и проверял наличие. А потом постепенно добавлял бы код. В общем, обычная отладка.
    Ответ написан
  • Как взять все из таблицы, но с уникальным условием?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для того, чтобы взять всё из таблицы, но с уникальным условием, надо сначала подумать.
    Над тем, от какого конкретно title мы хотим получить id
    Если исходить из того, что может быть несколько записей с одним и тем же title, у них будут разные id.
    И по этой причине надо задаться вопросом - какой именно id из этих нескольких мы хотим получить. И зачем.

    И после этого либо изменить вопрос, либо структуру базы данных.
    Ответ написан
    Комментировать
  • Что в WordPress Может блокировать отправку POST запроса?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    503 - это не блокировка, а ошибка. Надо смотреть в логах - какая именно, и исправлять
    Ответ написан
  • В чем разница object и array в json_decode()?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Массив - это массив, объект - это объект. Объект, в отличие от массива, может содержать не только данные, но и методы для работы с ними.
    Если использовать функцию json_decode(), то никаких методов не будет, только данные. То есть разницы никакой, чисто эстетическая.
    Ответ написан
    Комментировать
  • Как решит вопрос с учеткой?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Решение очевидное - выдавать каждому клиенту свой токен.
    Ответ написан
    Комментировать
  • TypeError: can only concatenate list (not "str") to list?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Скажите, что, по вашему, означают вот эти скобочки - [ и ]? Они здесь просто для красоты?
    Ответ написан
  • Какой движок с компактным билдом можно найти?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я думаю, вопрос закроют за спам тегами, но в качестве одного из решений могу порекомендовать ассемблер. Не совсем движок, но тут уж не до жиру. Надо выбирать - или удобство, или размер дистрибутива.
    Ответ написан
    Комментировать
  • Как исправить проблему с созданием регистрации пользователей?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это всё просто ужасно. Начиная прямо с первой строчки, class Register extends Database
    Делать отдельный класс для регистрации глупо. Если уж делать класс, то для манипуляции юзером в целом, а не одной только регистрации. Плюс, регистрация пользователя - это не база данных. И не должна наследовать классу Database.
    По сути, вы хотите натянуть ООП на обычное процедурное программирование. Не надо этого делать, получится самолёт из соломы. Сделайте простую функцию.

    Но это ещё цветочки. Остальных проблем тут выше крыши:
    1. Никогда не используйте сокращённый синтаксис INSERT. Всегда надо явно перечислять поля. Это, скорее всего, и является причиной ошибки. Но даже если нет, то проблемы всё равно вылезут в будущем
    2. Собственно сообщение об ошибке нам и надо получить от базы данных, чтобы понять в чем проблема. для этого к коду соединения с БД надо добавить строчку
      mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      и после этого смотреть сообщение об ошибке
    3. Самое главное - SQL инъекция. Какой смысл делать регистрацию вообще, если любой дурак узнает пароли всех остальных пользователей или сможет авторизоваться вообще без пароля? Запросы надо выполнять только через подготовленные выражения
    4. И по поводу паролей. Пароли надо хранить в фаршированном виде, обработанными функцией password_hash()
    Ответ написан
    Комментировать
  • Будет ли использоваться индекс в запросе вида WHERE `field1` LIKE '_aa_a_'?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет разницы, один или 10.
    Для простоты индекс можно рассматривать как отсортированный список.
    Если список учеников в классном журнале отсортирован по алфавиту, то вы довольно быстро найдёте нужного.
    А теперь представьте, что вы по тому же самому списку ищете фамилию, на зная первой буквы. И тут уже без разницы, сколько букв мы не знаем. И одной достаточно, чтобы полностью поломать поиск.

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

    Полнотекстовый индекс также не является чем-то особенным в этом плане. Он устроен по совершенно тупому принципу: грубо говоря, БД берёт текст из колонки, и разбивает его на слова. И строит по этим словам снова точно такой же отсортированный список, с указанием, в каких строках это слово используется. То есть когда мы делаем запрос с match, то mysql находит искомое слово в индексе, и возвращает из него все строки.

    И точно так же полнотекстовый индекс не работает, если поставить звёздочку спереди. Мануал так и говорит:
    Words match if they begin with the word preceding the * operator

    То есть звездочка работает только если поставить её в конце слова.
    match against ('класс*') найдёт слово "классный", а '*accный' его уже не найдёт.
    То есть БД тебе сразу говорит, что для такого поиска полнотекстовый индекс будет бесполезен.
    Ответ написан
    Комментировать