@Bahantay

Telegram бот-анкета сохраняет данные в БД не по порядку, как исправить ошибку?

Здравствуйте пишу прогу телеграмбот анкета на питоне связал с MySQL, но веденные данные не сохраняет, не по правильному порядку, помогите пжл вот код
import telebot
from telebot import types  # кнопки
import mysql.connector
 
 
bot = telebot.TeleBot("")
 
 
db = mysql.connector.connect(
    host="localhost",
    user="",
    passwd="",
    port="3306",
    database="diplomka"
)
 
cursor = db.cursor()
 
 
 
user_data = {}
class User:
    def __init__(self, city):
        self.city = city
        self.fio = ''
        self.telephone = ''
        self.iin = ''
        self.adress = ''
        self.napravlenie = ''
 
 
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    itembtn1 = types.KeyboardButton('Павлодар')
    itembtn2 = types.KeyboardButton('Экибастуз')
    itembtn3 = types.KeyboardButton('Нур-Султан')
    itembtn4 = types.KeyboardButton('Алматы')
    itembtn5 = types.KeyboardButton('Атырау')
    itembtn6 = types.KeyboardButton('Тараз')
    markup.add(itembtn1, itembtn2, itembtn3, itembtn4, itembtn5, itembtn6)
 
    msg = bot.send_message(message.chat.id, 'Ваш город?', reply_markup=markup)
    bot.register_next_step_handler(msg, process_city_step)
 
def process_city_step(message):
    try:
        user_id = message.from_user.id
        user_data[user_id] = User(message.text)
 
        msg = bot.send_message(message.chat.id, "Введите Ф.И.О")
        bot.register_next_step_handler(msg, process_fio_step)
    except Exception as e:
        bot.reply_to(message, 'oooops')
 
def process_fio_step(message):
    try:
        user_id = message.from_user.id
        user_data[user_id] = User(message.text)
 
        msg = bot.send_message(message.chat.id, "Введите номер Вашего телефона")
        bot.register_next_step_handler(msg, process_telephone_step)
    except Exception as e:
        bot.reply_to(message, 'oooops')
 
def process_telephone_step(message):
    try:
        user_id = message.from_user.id
        user_data[user_id] = User(message.text)
 
        msg = bot.send_message(message.chat.id, "Введите свой ИИН")
        bot.register_next_step_handler(msg, process_iin_step)
    except Exception as e:
        bot.reply_to(message, 'oooops')
 
def process_iin_step(message):
    try:
        user_id = message.from_user.id
        user_data[user_id] = User(message.text)
 
        msg = bot.send_message(message.chat.id, "Введите свой адресс")
        bot.register_next_step_handler(msg, process_adress_step)
    except Exception as e:
        bot.reply_to(message, 'oooops')
 
def process_adress_step(message):
    try:
        user_id = message.from_user.id
        user_data[user_id] = User(message.text)
        markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
        itembtn1 = types.KeyboardButton('сложное МП')
        itembtn2 = types.KeyboardButton('среднее МП')
        itembtn3 = types.KeyboardButton('простое МП')
        itembtn4 = types.KeyboardButton('сайт-визитка')
        itembtn5 = types.KeyboardButton('интернет магазин')
        itembtn6 = types.KeyboardButton('сайт с базой данных')
 
        markup.add(itembtn1, itembtn2, itembtn3, itembtn4, itembtn5, itembtn6)
 
        msg = bot.send_message(message.chat.id, "Выберите направление разработки", reply_markup=markup)
        bot.register_next_step_handler(msg, process_napravlenie_step)
    except Exception as e:
        bot.reply_to(message, 'oooops')
 
def process_napravlenie_step(message):
    try:
        user_id = message.from_user.id
        user = user_data[user_id]
        user.napravlenie = message.text
 
        sql = "INSERT INTO users (city, fio, telephone, iin, adress, napravlenie, user_id) \
                                 VALUES (%s, %s, %s, %s, %s, %s, %s)"
        val = (user.city, user.fio, user.telephone, user.iin, user.adress, user.napravlenie, user_id)
        cursor.execute(sql, val)
        db.commit()
 
        bot.send_message(message.chat.id, "Заявка подана!")
    except Exception as e:
        bot.reply_to(message, 'Ошибка !')
 
bot.enable_save_next_step_handlers(delay=2)
 
bot.load_next_step_handlers()
 
if __name__ == '__main__':
    bot.polling(none_stop=True)

5ee7987b64d2f415327314.jpeg
  • Вопрос задан
  • 1654 просмотра
Решения вопроса 2
shabelski89
@shabelski89
engineer
Вы перезаписываете значение в словаре, переходя из хендлера в хендлер, как минимум, в остальное не вникал.
Вот Вам код чтобы было понятно что надо делать:
user_id = 123
get_id_from_db = 6

user_data = {user_id: {'city':'', 'fio':'', 'phone':'', 'inn':'', 'address':'', 'napravlenie':'', 'id': get_id_from_db}}

print(user_data)

user_data[user_id]['city'] = 'Павлодар'
print(user_data)

user_data[user_id]['fio'] = 'Иванов а м'
print(user_data)

user_data[user_id]['phone'] = '77777777'
print(user_data)

user_data[user_id]['inn'] = '4679085467'
print(user_data)

user_data[user_id]['address'] = 'Петрова 65 кв 98'
print(user_data)

user_data[user_id]['napravlenie'] = 'сайт-визитка'
print(user_data)
Ответ написан
Комментировать
Так вы постоянно обновляете юзера в словаре и ничего в нём не меняете кроме города
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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