Добрый день. Есть код на PHP, который получает от пользователя необходимые данные и отвечает ему моментально. НО! Я хочу сделать так, чтобы пользователь получал ответ не моментально, а через 5 минут. Например: П - пользователь, PHP - PHP. П: x = 5. PHP: Вы получите ответ через 5 минут. PHP: 2+x=7. Подскажите пожалуйста в какую сторону копать, а лучше покажите на примере. В PHP совсем новичок, мало чего понимаю. Спасибо
В общем... Пишу бота для Вконтакте. Перенёс хранение данных из файлов в базу данных, но не могу понять, почему функция if else на одно вхождение данных срабатывает 2 раза, тем самым отсылает 2 сообщения на одно сообщение и оба раза правильные сообщения. Функция проверяет выдавался ли ключ от Steam игры. Для этого она проверяет записи в базе данных, если записей об этом пользователе нет, то бот выдает ключ. Если есть данные что ключ выдавался, то пишет соответствующее сообщение. Сейчас объясню почему правильно. Пользователь пишет команду. Бот выдает ключ и добавляет запись в БД о том, что этому пользователю ключ выдан. Затем if else еще раз срабатывает и проверяет, не выдан ли ключ, но видит что ключ выдан и пишет еще одно сообщение... Даже не знаю что делать. Какие ещё нужны данные чтобы понять в чем проблема? Уже сижу часа 3 над этим. --- Добавлено --- Есть две таблицы, в каждой таблице по два столбца. gifts (id и gift) и users (id и vk).
Есть две таблицы, в каждой таблице по два столбца. gifts (id и gift) и users (id vk). Вот часть кода. PHP: //Алгоритм if (strcasecmp(mb_strtolower($userMsg), "помощь") == 0) { $request_params = array( 'message' => $help_lang, 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); } elseif (strcasecmp(mb_strtolower($userMsg), "ключ") == 0) { $query = "SELECT vk FROM users WHERE vk={$user_id};"; $result = $mysqli->query($query); /* associative and numeric array */ $row = $result->fetch_array(MYSQLI_BOTH); // Проверка выдавали ли бонусный код $find = in_array($user_id, $row); if (!$find) { $key_code_query = "SELECT gift FROM gifts ORDER BY id ASC LIMIT 1;"; $key_code_select = $mysqli->query($key_code_query); $key_code = $key_code_select->fetch_array(MYSQLI_BOTH); $key_code_delete_query = "DELETE FROM gifts ORDER BY id ASC LIMIT 1;"; $key_code_delete = $mysqli->query($key_code_delete_query); $users_query = "INSERT INTO users (vk) VALUES ('$user_id')"; $users_insert = $mysqli->query($users_query); $request_params = array( 'message' => "✔ Ваш ключ: {$key_code[0]}", 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); /* close connection */ mysqli_close($db); } else { $request_params = array( 'message' => "❗ Вы уже получили ключ за вступление в группу Вконтакте!", 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); } } else { $request_params = array( 'message' => "✳ Напиши \"ключ\" чтобы получить ключ за вступление в группу.", 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' );
Прошелся по коду xdebug. Ошибок больше нет, но Бот всё равно отправляет 2 сообщения вместо одного. Вот пример того, как должен работать Бот и как работает сейчас (неправильно). Первое и второе сообщения дают правильные ответы, а третье сообщение даёт не правильный ответ. Может быть проблема самого Callback API Вконтакте? Посмотреть вложение 1234 Исправленный код: PHP: //Алгоритм if (strcasecmp(mb_strtolower($userMsg), "помощь") == 0) { $request_params = array( 'message' => $help_lang, 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); } elseif (strcasecmp(mb_strtolower($userMsg), "ключ") == 0) { $query = "SELECT vk FROM users WHERE vk={$user_id};"; $result = $mysqli->query($query); /* associative and numeric array */ $row = $result->fetch_array(MYSQLI_BOTH); // Проверка выдавали ли бонусный код if (!is_array($row)) { $key_code_query = "SELECT gift FROM gifts ORDER BY id ASC LIMIT 1;"; $key_code_select = $mysqli->query($key_code_query); $key_code = $key_code_select->fetch_array(MYSQLI_BOTH); $key_code_delete_query = "DELETE FROM gifts ORDER BY id ASC LIMIT 1;"; $key_code_delete = $mysqli->query($key_code_delete_query); $users_query = "INSERT INTO users (vk) VALUES ('$user_id')"; $users_insert = $mysqli->query($users_query); $request_params = array( 'message' => "✔ Ваш ключ: {$key_code[0]}", 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); } else { $request_params = array( 'message' => "❗ Вы уже получили ключ за вступление в группу Вконтакте!", 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); } } else { $request_params = array( 'message' => "✳ Напиши \"ключ\" чтобы получить ключ за вступление в группу.", 'user_id' => $user_id, 'access_token' => $token, 'v' => '5.0' ); }
так бывает поздравляю с победой идея с двойным дёрганьем колбэка со стороны вк вполне имеет право на жизнь