HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 14.02.2023, 02:03
linmsqn
Постоянный
Регистрация: 29.05.2020
Сообщений: 331
С нами: 3136519

Репутация: 73
По умолчанию

Вообщем, написан бот на PHP, имеется определенная команда, которая выполняет поиск по БД и далее скидывает результат поиска в сообщении. К сообщению идет каллбек кнопка, по нажатию которой я хочу создать ссылку, чтобы ссылка вела на определенную страницу - нужно использовать текст из переменной, чтобы перекинуло на нужную страницу, но текст из переменной не появляется почему-то. Как исправить - не знаю

Код самой команды:

PHP:





Код:
$texttest
=
$vk
-
>
buttonText
(
'test'
,
'blue'
,
[
'user'
=
>
'ulink'
]
)
;
if
(
in_array
(
$cmd
,
[
'юзер'
]
)
)
{
try
{
$uid
=
implode
(
" "
,
$args
)
;
if
(
$uid
==
''
)
{
$vk
-
>
reply
(
"Не указан аргумент, пример: (юзер 1)"
)
;
exit
;
}
$result
=
$mysqli
-
>
query
(
"SELECT * FROM `users` WHERE id=$uid"
)
;
while
(
$row
=
$result
-
>
fetch_assoc
(
)
)
{
$uidinfo2
=
$row
[
'username'
]
;
// Условно - abcdef
}
if
(
$uidinfo1
!=
''
)
{
$list
.
=
"ЛОГИН - "
.
$uidinfo2
;
$vk
-
>
sendButton
(
$id
,
$list
,
[
[
$texttest
]
]
,
true
)
;
}
else
{
$vk
-
>
reply
(
'Не найдено в таблице'
)
;
}
}
catch
(
Exception
$e
)
{
$vk
-
>
reply
(
"Ошибка: "
.
$e
-
>
getMessage
(
)
)
;
}
}


Действие по нажатию кнопки:

PHP:





Код:
if
(
$payload
)
{
if
(
$payload
[
'user'
]
==
'ulink'
)
{
$vk
-
>
reply
(
"Ссылка на профиль: https://site.com/$uidinfo2"
)
;
// ДОЛЖНО ВЫВЕСТИ - https://site.com/abcdef
// ВЫВОДИТ - https://site.com/
// То есть вывод тупо без нужного параметра
}
}
 
Ответить с цитированием

  #2  
Старый 19.03.2023, 18:34
Livarka
Участник форума
Регистрация: 27.08.2017
Сообщений: 143
С нами: 4584912

Репутация: 83
По умолчанию

1. Попробуй перебрать массив через foreach

2. У тебя запросы небезопасные, почитай тут https://www.php.net/manual/ru/mysqli.prepare.php
 
Ответить с цитированием

  #3  
Старый 19.03.2023, 18:39
zzalupka
Познающий
Регистрация: 16.03.2023
Сообщений: 49
С нами: 1666070

Репутация: 13
По умолчанию

Проблема заключается в том, что переменная $uidinfo2 находится внутри области видимости цикла while, а не доступна внутри обработчика каллбека кнопки. Вы можете объявить переменную за пределами цикла, а затем присвоить ей значение внутри цикла, чтобы она была доступна и в обработчике каллбека кнопки:

Код:





Код:
if(in_array($cmd, ['юзер'])) {

 try {

$uid = implode(" ", $args);

if($uid == '') {

$vk->reply("Не указан аргумент, пример: (юзер 1)");

 exit;

        }

$result = $mysqli->query("SELECT * FROM `users` WHERE id=$uid");

$uidinfo2 = '';

while($row = $result->fetch_assoc()) {

$uidinfo2 = $row['username']; // Условно - abcdef

        }

if ($uidinfo2 != '') { //исправлено с $uidinfo1 на $uidinfo2

$list .= "ЛОГИН - ".$uidinfo2;

$vk->sendButton($id, $list, [[$texttest]], true);

} else {

$vk->reply('Не найдено в таблице');

        }

    }

catch (Exception $e) {

$vk->reply("Ошибка: ".$e->getMessage() );

    }

}

if ($payload) {

if ($payload['user'] == 'ulink') {

$vk->reply("Ссылка на профиль: https://site.com/$uidinfo2");

    }     

}


Теперь переменная $uidinfo2 будет доступна и внутри обработчика каллбека кнопки и ссылка будет формироваться правильно.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.