Задать вопрос
  • Telegram api как проголосовать post запросом в опросе?

    AndrewBoeing
    @AndrewBoeing
    Саша, Да, точно, метод messages.sendVote только для пользователей. Попробуйте метод sendPollAnswer, чтобы отправить голос от бота в определенный вариант ответа.
  • Telegram api как проголосовать post запросом в опросе?

    AndrewBoeing
    @AndrewBoeing
    Саша, убедитесь, что вы отправляете запрос на правильный URL
    https://api.telegram.org/bot<token>/messages.sendVote

    Если все правильно, попробуйте использовать другой метод API, например, getUpdates, чтобы убедиться, что ваш бот может связаться с серверами Telegram
  • Как заполнить колонку в таблице уникальными значениями?

    AndrewBoeing
    @AndrewBoeing
    chtopisatsuda, Да, вы можете настроить MySQL, чтобы он автоматически генерировал уникальный ключ при каждой вставке новой записи в таблицу xf_user.

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

    Пример SQL-запроса для создания триггера:

    CREATE TRIGGER tr_generate_unique_key BEFORE INSERT ON xf_user
    FOR EACH ROW
    SET NEW.unique_key = UUID();


    Этот триггер будет вызываться перед вставкой новой записи в таблицу xf_user и устанавливать поле unique_key в новое уникальное значение, сгенерированное функцией UUID().

    Таким образом, при добавлении новой записи в таблицу xf_user, уникальный ключ будет автоматически генерироваться и сохраняться в поле unique_key без использования PHP-кода.
  • Как заполнить колонку в таблице уникальными значениями?

    AndrewBoeing
    @AndrewBoeing
    chtopisatsuda, Если все значения в столбце unique_key одинаковы, это может означать, что при выполнении запроса UPDATE xf_user SET unique_key = UUID() не было правильно сгенерировано новое значение UUID() для каждой строки.

    Вы можете попробовать использовать функцию UUID_SHORT() вместо UUID() для генерации более коротких уникальных идентификаторов. Использование UUID_SHORT() также может уменьшить вероятность коллизий.

    Пример SQL-запроса для генерации уникальных ключей с использованием UUID_SHORT():

    sql

    ALTER TABLE xf_user ADD unique_key VARCHAR(18) UNIQUE;

    UPDATE xf_user SET unique_key = CONCAT(LEFT(UUID_SHORT(), 10), RIGHT(UUID_SHORT(), 8));

    Этот запрос создаст новую колонку unique_key в таблице xf_user и заполнит ее уникальными значениями для каждого пользователя, используя функцию UUID_SHORT(). Функция UUID_SHORT() генерирует 64-битное значение, поэтому мы объединяем его с помощью функции CONCAT() и обрезаем до 18 символов (10 символов слева и 8 символов справа). Затем мы используем функцию LEFT() и RIGHT() для обрезания первых 10 и последних 8 символов UUID_SHORT() соответственно.

    Если это не поможет, проверьте, что столбец unique_key был добавлен в таблицу xf_user и объявлен как UNIQUE. Вы также можете проверить, что в запросе UPDATE xf_user SET unique_key = ... нет ошибок.
  • Как заполнить колонку в таблице уникальными значениями?

    AndrewBoeing
    @AndrewBoeing
    chtopisatsuda, Если у всех пользователей в колонке unique_key одинаковое значение, это может произойти, если вы использовали функцию UUID() в качестве значения по умолчанию при создании столбца unique_key.

    Чтобы исправить это, вы можете выполнить следующий запрос:

    sql

    UPDATE xf_user SET unique_key = UUID() WHERE unique_key = 'значение_по_умолчанию';

    Этот запрос обновит все строки в таблице xf_user, устанавливая для каждой строки новое уникальное значение для unique_key, если текущее значение равно значению по умолчанию. Обратите внимание, что вы должны заменить 'значение_по_умолчанию' на значение, которое было установлено при создании столбца unique_key.

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

    AndrewBoeing
    @AndrewBoeing
    Цикл while в вашем коде выглядит корректным и не является причиной, по которой записывается несколько записей с одним временем. Ошибка скорее всего связана с тем, что цикл выполняется более одного раза в течение одной секунды, поэтому в таблицу events записывается несколько записей с одинаковым временем.

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

    Пример исправленного кода:

    $sql="select login,id,ip from web_users where (now() - online) > interval '".($timeout*60)."' AND session_id!=''";
    $res=$db->query($sql);
    while($arru=$res->fetch(PDO::FETCH_OBJ)){
      $now = microtime(true);
      $db->query("INSERT INTO events (event_date,event_time,ip_client,user_id,user_login,event_type,event_place,event_note,event_status,title) VALUES
                    ('" . date("Y-m-d", $now) . "','" . date("H:i:s.", $now) . floor(($now-floor($now))*1000) . "',''," .$arru->id . ",'" .  $arru->login . "',1,'','<tr><td>выход по таймауту</td></tr>',1,'')");
    }
    
    $db->query("UPDATE web_users SET online='1970-01-01 00:00:00.000000', session_id='' WHERE (now() - online) > interval '".($timeout*60)."'");


    В этом коде мы использовали функцию microtime(true) для получения текущего времени с миллисекундной точностью и добавили миллисекунды к стандартным параметрам времени H:i:s. Теперь каждая запись будет иметь уникальное время.
  • Как сделать ручной редирект на определенную страницу?

    AndrewBoeing
    @AndrewBoeing Автор вопроса
    Спасибо! Думаю, самое то )
  • Как сделать ручной редирект на определенную страницу?

    AndrewBoeing
    @AndrewBoeing Автор вопроса
    Дмитрий, может какая общая литература есть? (ну, кроме PHP для чайников:-) )
  • Как сделать ручной редирект на определенную страницу?

    AndrewBoeing
    @AndrewBoeing Автор вопроса
    Дмитрий, спасибо за предложение! А есть где почитать про это? )