← Вернуться к списку тем

Доп. вопрос в Боте-магазине.

Здравствуйте, я решил в боте магазине добавить доп. вопрос после телефона и До адреса доставки.
Назвал его Способ доставки. там юзер сможет от руки впечатать что он хочет- Курьер, СДЭК или еще что то.
вроде все дописал по аналогии но при вводе ответа на вопрос о способе доставки идет ошибка(((

доп. поле в таблице я добавил вот так- http://prntscr.com/tal9o9

на выходе вот так получается- http://prntscr.com/tambag

Ответы


  • Грачик Абдулошвили [03.07.2020 в 11:27 → Грачик Абдулошвили]
    Почему ошибка Введенных данных кто нить может сказать?
  • iMakeBots [03.07.2020 в 12:24 → Грачик Абдулошвили]
    Без тестирования ошибки которые бросились в глаза:

    1. Метод insertDostavka() - вам не нужен так как я не нашел где у вас он вызывается, в роутере идет вызов на saveDostavkaUser()
    2. Вы просите указать определенные компании доставки, при этом у вас бессмысленная проверка на любой символ отправленный пользователем if (preg_match("/./", $text)). Бессмысленный он потому, что пользователю сам Телеграм не позволит отправить пустое сообщение, и отправив любой символ - проверка у вас пройдет. Вы можете жестко указать какие данные вы ждете, например по шаблону ^(СДЭК|ПЭК|DHL)$
    3. В методе saveDostavkaUser() у вас переменная $phone до вызова не заполнена и находиться в значении NULL
    4. в методе saveAdressUser() в запросе вы выбираете значение phone, а надо по вашей логике dostavka - $dostavka = $this->pdo->prepare("SELECT phone FROM bot_shop_profile WHERE user_id = :user_id");


    Ваша ошибка из-за не правильного использования шаблона, он у вас не обрамлен.

    В PHP регулярное выражение — это строка, которая начинается и заканчивается символом-разделителем. Все, что находится между разделителями и есть регулярное выражение.

    Часто используемыми разделителями являются косые черты “/”, знаки решетки “#” и тильды “~”. Ниже представлены примеры шаблонов с корректными разделителями:

    /foo bar/
    #^[^0-9]$#
    %[a-zA-Z0-9_-]%

    // неправильно
    if (preg_match(".", $text))
    // правильно
    if (preg_match("/./", $text))
  • Грачик Абдулошвили [03.07.2020 в 12:43 → iMakeBots]
    сделал все как вы написали кроме 3го пункта так как не понял что там нужно исправить.
    в итоге пошло чуть дальше, теперь у меня после ввода вида доставки (например СДЭК) он присваивается и Типу доставки и адресу сразу- http://prntscr.com/tb1781
  • iMakeBots [03.07.2020 в 12:57 → Грачик Абдулошвили]
    По пункту 3 нужно добавить выборку из базы телефона.
    $phone = $this->pdo->prepare("SELECT phone FROM bot_shop_profile WHERE user_id = :user_id");
    $phone->execute(['user_id' => $user_id]);

    На скрине не увидел у вас запроса адреса? Если это вы удалили перед скрином тогда вот:

    private function saveAdressUser($text, $data)
        {
            $user_id = $this->getChatId($data);
            // Достаем телефон, адрес и доставку
            $orderData = $this->pdo->prepare("SELECT phone, dostavka, adress FROM bot_shop_profile WHERE user_id = :user_id");
            $orderData->execute(['user_id' => $user_id]);
    
            $orderInfo = $orderData->fetch();
    
            if ($this->setActionUser("step_4_ready", $user_id)) {
                if ($this->setParamUser('adress', $text, $user_id)) {
                    $text_ = "<b>Оформление заказа</b>nn";
                    // сумма заказа
                    $text_ .= "Сумма заказа: " . $this->totalSumOrder($user_id) . " рублей";
                    // телефон
                    $text_ .= "nТелефон: " . $orderInfo['phone'];
                    $text_ .= "nСпособ доставки: " . $orderInfo['dostavka'];
                    $text_ .= "nАдрес для доставки: " . $orderInfo['adress'];
                    $buttons[][] = $this->buildInlineKeyBoardButton('✔ Готово', 'setReady_0');
                } else {
                    $text_ = "Ошибка попробуйте снова /start";
                }
            } else {
                $text_ = "Ошибка попробуйте еще раз";
            }
    .......
    
  • Грачик Абдулошвили [03.07.2020 в 13:06 → iMakeBots]
    https://ideone.com/Mtp2L8
  • Грачик Абдулошвили [03.07.2020 в 13:08 → Грачик Абдулошвили]
    Выше код с рабочим доп. вопросом, если кому интересно!

    Всем спасибо за помощь)
  • Bakhrom Juraev [05.07.2020 в 11:21 → Грачик Абдулошвили]
    Спасибо. SQL тоже обнови пожалуйста
  • Bakhrom Juraev [05.07.2020 в 11:39 → Грачик Абдулошвили]
    и оплата тоже только через яндекс. можешь добавить способ наличные ?