ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Запись текста в переменную (https://forum.antichat.xyz/showthread.php?t=1468061)

linmsqn 14.02.2023 02:03

Вообщем, написан бот на 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/
// То есть вывод тупо без нужного параметра
}
}


Livarka 19.03.2023 18:34

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

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

zzalupka 19.03.2023 18:39

Проблема заключается в том, что переменная $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 будет доступна и внутри обработчика каллбека кнопки и ссылка будет формироваться правильно.


Время: 16:16