@korshunov2110
Программист

Как исключить повторного добавления?

Здравствуйте !
Я написал код
Для бота ВК

У меня возникла проблема!

Суть кода :
Если пользователь отправляет команду "рег" боту , его добавляет в базу данных

Суть проблемы :
Пользователь добавляется в базу данных без команды - любым сообщением!
А если отправить команду то добавляется сразу 2 раза из-за обычного сообщения и из-за команды !

Задача :
Исключить добавления любым сообщением!

Код:
case 'message_new': 
$peer_id = $data->object->peer_id; 
$body = $data->object->text; 
$user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&access_token={$token}&v=5.80"));
$reg = $body = рег;

require_once 'connection.php'; 

//добавление в БД
if ($reg) {
    $link = mysqli_connect($host, $user, $password, $database) 
        or die("Ошибка " . mysqli_error($link)); 
		
    $query ="INSERT INTO `bot`(`id_bot`, `id_vk`) VALUES (NULL, $peer_id)";
     
    $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); 
    if($result){
	
    }
    mysqli_close($link);
}
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@fwervbyberstvrstrf
А если отправить команду то добавляется сразу 2 раза из-за обычного сообщения и из-за команды !

Потому что $reg = $body, а $body = $data->object->text, а $reg это как условие и как бы получается, что код выполняется 2 раза, если я правильно понял. Сделайте по-человечески условие, лучше через preg_match:
if(preg_match('/рег/', $body)) {...

Ну и советую сделать проверку наличия id_vk запросом SELECT, в базу.
Если пользователь есть, то ничего не добавляем, если нет то соответственно добавляем
В итоге будет примерно так:
$check_user="SELECT id_vk FROM `bot` WHERE `id_vk` = {$peer_id}"; // делаем запрос на проверку по $peer_id
if(empty($check_user)) { //если переменная пустая (ничего не найдено в запросе)
 $query ="INSERT INTO `bot`(`id_bot`, `id_vk`) VALUES (NULL, $peer_id)"; // то добавляем пользователя в базу
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы