За последние 24 часа нас посетили 22488 программистов и 1007 роботов. Сейчас ищут 662 программиста ...

Помогите новичку пожалуйста!

Тема в разделе "PHP для новичков", создана пользователем seif, 27 янв 2021.

  1. seif

    seif Активный пользователь

    С нами с:
    21 фев 2015
    Сообщения:
    13
    Симпатии:
    0
    Пишу на php бота для telegram. Который спрашивает у пользователя несколько параметров, которые я хочу записать в базу данных sql , а потом уже оттуда их выдернуть и по форуме рассчитать. Но дело в том что на первом этапе данные записываются, когда пользователь выбирает из меню "мужчина\женщина". А второй этап указания веса, в таблицу никак не записываются. В таблице для веса создан столбец с параметрами INT(10).
    Я не понимаю почему введенные данные не передаются в таблицу sql, когда переменная $text
    несет в себе любые цифры которые ты вводишь.
    Мне нужно что бы на этапе каждой кнопки в таблицу записывались введенные пользователем данные.
    Моя идея была в каждое условие вставлять функцию которая записывает на этапе нажатой кнопки данные в нужный столбец. Не знаю правильная ли это задумка.


    Текст кода:
    Код (Text):
    1. $result = $telegram->getWebhookUpdates();
    2.  
    3. $text = $result["message"]["text"];
    4. $chat_id = $result["message"]["chat"]["id"];
    5. $name = $result["message"]["from"]["username"];
    6. $first_name = $result["message"]["from"]["first_name"];
    7. $last_name = $result["message"]["from"]["last_name"];
    8. $get_user = get_user($connect, $chat_id);
    9. $old_id = $get_user['chat_id'];
    10. $username = $first_name . ' ' . $last_name;
    11.  
    12. if($text == "/start"){
    13.     $reply = "Здравствуйте! $username , я бот КБЖУ.
    14.     КБЖУ – это аббревиатура, созданная приверженцами правильного питания в целях упрощения подачи информации. Расшифровка термина:
    15.  
    16. К – калории;
    17. Б – белки;
    18. Ж – жиры;
    19. У – углеводы
    20.  
    21.     Я помогу рассчитать дневную калорийность, вам нужно просто ответить на несколько вопросов, в ответ вы получите:
    22.     - свою суточную норму,
    23.     - рекомендации по питанию,
    24.     - а так же варинаты репецтов на завтрак, обед, ужин + перекусы, исходя из вашей суточной нормы.
    25.  
    26.     Мои расчеты очень быстрые и удобные для вас. Нажмите на кнопку 'Оплата', вы получите ссылку, после оплаты мы перейдем к вашим расчетам." ;
    27.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    28.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    29. }elseif($text == "Оплата - 69р.") {
    30.     $reply = " $first_name  $last_name перейдите по ссылке : https://oplata.qiwi.com/form?invoiceUid=1e682f5d-3610-4904-ba05-52f82ca2336d
    31.     После оплаты нажмите на кнопку 'Я оплатил(а)'";
    32.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu2, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    33.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    34.  
    35. }elseif($text == "Я оплатил(а)") {
    36.     $reply = " $first_name  $last_name спасибо за оплату! Выберите пожалуйста ваш пол.";
    37.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu3, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    38.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    39.  
    40. }elseif($text == "Мужской") {
    41.     $reply = " $first_name  $last_name напишите в килограммах ваш вес и нажмите 'далее'.";
    42.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu4, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    43.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    44.     pol($connect, $chat_id, $text);
    45.  
    46.  
    47. }elseif($text == "Женский") {
    48.     $reply = " $first_name  $last_name напишите в килограммах ваш вес и нажмите 'далее' .";
    49.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu4, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    50.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    51.     pol($connect, $chat_id, $text);
    52.  
    53.  
    54.  
    55.  
    56.  
    57.  
    58. }elseif($text == "Вес, далее") {
    59.  
    60.     $reply = " $first_name  $last_name напишите в сантиметрах ваш рост и нажмите 'далее'";
    61.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu5, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    62.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    63. ves($connect, $chat_id, $text);
    64.  
    65.  
    66.  
    67.  
    68.  
    69.  
    70.  
    71.  
    72.  
    73.  
    74.  
    75.  
    76.  
    77.  
    78.  
    79. }elseif($text == "Рост, далее") {
    80.  
    81.     $reply = " $first_name  $last_name напишите ваш возраст и нажмите 'далее'";
    82.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu6, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    83.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    84.  
    85. }elseif($text == "Возраст, далее") {
    86.     $reply = " $first_name  $last_name напишите ваш коэффициент согласно таблице активности
    87.     1,2 – отсутствие физических нагрузок, сидячая работа;
    88.     1,4 – физические нагрузки 2 раза в неделю;
    89.     1,46 – 4/5 тренировок в неделю или активная работа «в движении»;
    90.     1,55 – 5/6 интенсивных тренировок в неделю;
    91.     1,63 – тренировки 7 дней в неделю;
    92.     1,72 – ежедневные нагрузки 2 раза в день;
    93.     1,9 – интенсивные тренировки 2 раза в день или же тяжелые физические нагрузки на работе.";
    94.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu7, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    95.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    96.  
    97. }elseif($text == "Активность, далее") {
    98.     $reply = " $first_name  $last_name перейдите по ссылке : https://oplata.qiwi.com/form?invoiceUid=1e682f5d-3610-4904-ba05-52f82ca2336d
    99.     После оплаты нажмите на кнопку 'Я оплатил(а)'";
    100.     $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $menu8, 'resize_keyboard' => true, 'one_time_keyboard' => false]);
    101.     $telegram->sendMessage(['chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup]);
    102. }
    103.  
    104.  
    105.  
    106.  
    107.  
    108.  
    109.  
    110.  
    111.  
    112.  
    113.  
    114. add_user($connect, $username, $chat_id, $name, $old_id);
    115. textlog($connect, $chat_id, $text);

    Текст когда функций :

    Код (Text):
    1. <?php
    2.  
    3. function add_user($connect, $username, $chat_id, $name, $old_id){
    4.     $username = trim($username);
    5.     $chat_id = trim($chat_id);
    6.     $name = trim($name);
    7.  
    8.     if($chat_id == $old_id)
    9.     return false;
    10.     $t = "INSERT INTO users (username, chat_id, name) VALUES ('%s', '%s', '%s')";
    11.     $query = sprintf($t, mysqli_real_escape_string($connect, $username),
    12.                         mysqli_real_escape_string($connect, $chat_id),
    13.                         mysqli_real_escape_string($connect, $name));
    14.     $result = mysqli_query($connect, $query);
    15.     if(!$result)
    16.         die(mysqli_error($connect));
    17.     return true;
    18. }
    19.  
    20. function get_user($connect, $chat_id){
    21.     $query = sprintf("SELECT * FROM users WHERE chat_id=%d", (int)$chat_id);
    22.     $result = mysqli_query($connect, $query);
    23.     if(!$result)
    24.         die(mysqli_error($connect));
    25.     $get_user = mysqli_fetch_assoc($result);
    26.     return $get_user;
    27. }
    28.  
    29. function textlog($connect, $chat_id, $text){
    30.     if(chat_id == '')
    31.     return false;
    32.     $t= "INSERT INTO textlog (chat_id, text) VALUES ('%s', '%s')";
    33.     $query = sprintf($t, mysqli_real_escape_string($connect, $chat_id),
    34.                          mysqli_real_escape_string($connect, $text));
    35.     $result = mysqli_query($connect, $query);
    36.     if(!$result)
    37.         die(mysqli_error($connect));
    38.     return true;
    39. }
    40. function pol($connect, $chat_id, $text){
    41.     if(chat_id == '')
    42.     return false;
    43.     $t= "INSERT INTO calculation (chat_id, pol) VALUES ('%s', '%s')";
    44.     $query = sprintf($t, mysqli_real_escape_string($connect, $chat_id),
    45.                          mysqli_real_escape_string($connect, $text));
    46.     $result = mysqli_query($connect, $query);
    47.     if(!$result)
    48.         die(mysqli_error($connect));
    49.     return true;
    50. }
    51. function ves($connect, $chat_id, $text){
    52.     if(chat_id == '')
    53.     return false;
    54.     $t= "INSERT INTO calculation (chat_id, ves) VALUES ('%s', '%s')";
    55.     $query = sprintf($t, mysqli_real_escape_string($connect, $chat_id),
    56.                          mysqli_real_escape_string($connect, $text));
    57.     $result = mysqli_query($connect, $query);
    58.     if(!$result)
    59.         die(mysqli_error($connect));
    60.     return true;
    61. }
    62.  
    63.  
    64.  
    65.  
    66.  
    67.  
    68.  
    69.  
    70.  
    71. ?>

    Код меню:

    Код (Text):
    1. <?php
    2.  
    3. $menu = [["Оплата "]];
    4. $menu2 = [["Я оплатил(а)"]];
    5. $menu3 = [["Мужской"], ["Женский"]];
    6. $menu4 = [["Вес, далее"]];
    7. $menu5 = [["Рост, далее"]];
    8. $menu6 = [["Возраст, далее"]];
    9. $menu7 = [["Активность, далее"]];
    10. $menu8 = [["Рассчитать"]];
    11. ?>
     
  2. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Потому что условие неверно: вы должны получить от пользователя число, а сравниваете со строкой
    Кроме того вы пытаетесь запихать её в числовое поле в базе данных
     
  3. seif

    seif Активный пользователь

    С нами с:
    21 фев 2015
    Сообщения:
    13
    Симпатии:
    0
    А как мне "шагать" по меню бота дальше, что бы после очередной кнопки появлялась новая кнопка, без сравнения со строкой?
    Можно маленький пример? А то я совсем нуб.

    И ведь кнопкой выше где мы выбираем мужской/женский пол, там все работает и записывается с тем же условием.
     
  4. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Отталкивайтесь не от ответов которые приходят от юзера, а от недостающей информации.