Sizning kodingizda, belgilangan shartning rostlikini tekshirish uchun bir nechta muhim narsalar mavjud. Kodni tahlil qilgandan so'ng, quyidagi muammo mavjud:
1.
2. Agar kod yozilgan shartlar rost bo'lsa va bot xabarini yuborsa, bunga sabab bo'lishi mumkin:
-
-
-
-
3. Agar kod to'g'ri ishlasa va bot xabarni yuborsa, foydalanuvchi "step/{$user_id}.txt" faylni yaratish va fayl ichiga "user+set+error" yozuvi yoziladi. Bunda, foydalanuvchi o'zingiz tomonidan belgilangan ishni amalga oshirmaganligini tushunish mumkin.
Muammolarni hal qilish uchun quyidagi tavsiyalarni ko'rsating:
-
- Botning foydalanuvchining
- Kod yordamida konsolga yoki log fayliga kiritilgan diagnostik ma'lumotlarni chiqaring, bu yordam bilan xato haqida qanday ma'lumotlarni olishingiz mumkin.
Yuqorida keltirilgan tavsiyalarni amalga oshirganingizdan so'ng, kodningizda qanday o'zgarishlar kerakligini ko'rib chiqib, to'g'rilashlarni amalga oshiring. Agar yana yordam kerak bo'lsa, menga yozib bering. Sizga yordam bera olishdan mamnunman!
1.
$text == "π E'lon berish" va $user_info['account_type'] == "HAYDOVCHI" shartlarining birinchi sharti rost bo'lishi kerak. Agar bu shartlardan biri ham rost emas bo'lsa, kod ishlay olmaydi.2. Agar kod yozilgan shartlar rost bo'lsa va bot xabarini yuborsa, bunga sabab bo'lishi mumkin:
-
$user_id o'zgaruvchisiga to'g'ri qiymat berilmagan yoki noto'g'ri formatda bo'lishi mumkin.-
users jadvalida berilgan user_id bilan mos keladigan ma'lumot topilmagan.-
money ustuni mavjud bo'lmagan yoki NULL qiymatga ega bo'lishi mumkin.-
money ustunida yetarli miqdorda mablag' mavjud emas bo'lishi mumkin.3. Agar kod to'g'ri ishlasa va bot xabarni yuborsa, foydalanuvchi "step/{$user_id}.txt" faylni yaratish va fayl ichiga "user+set+error" yozuvi yoziladi. Bunda, foydalanuvchi o'zingiz tomonidan belgilangan ishni amalga oshirmaganligini tushunish mumkin.
Muammolarni hal qilish uchun quyidagi tavsiyalarni ko'rsating:
-
$user_id o'zgaruvchisining to'g'ri qiymatga ega bo'lishini va mos jadvalda ma'lumotlarni topishni tekshiring.- Botning foydalanuvchining
money ustunidagi mablag'ini to'g'ri baholashini ta'minlang.- Kod yordamida konsolga yoki log fayliga kiritilgan diagnostik ma'lumotlarni chiqaring, bu yordam bilan xato haqida qanday ma'lumotlarni olishingiz mumkin.
Yuqorida keltirilgan tavsiyalarni amalga oshirganingizdan so'ng, kodningizda qanday o'zgarishlar kerakligini ko'rib chiqib, to'g'rilashlarni amalga oshiring. Agar yana yordam kerak bo'lsa, menga yozib bering. Sizga yordam bera olishdan mamnunman!
Kodni tahlil qilgandan so'ng, ushbu muammo mavjud:
1. Siz
2.
Bu muammolarni hal qilish uchun,
Bu kodda
1. Siz
exit() funksiyasini ishlatganingizda, skriptning barcha bajarilishi to'xtab qoladi. Buning natijasida, xabar yuborish jarayoni ham to'xtab qoladi.2.
sleep() funksiyasini ishlatganingizda, skriptning barcha bajarilishi to'xtab qoladi. Bunday holatda, Telegram serveridan olingan xabarlar o'qilmasligi mumkin.Bu muammolarni hal qilish uchun,
sleep() funksiyasini ishlashini bekor qilish kerak. Siz faqatgina deleteMessage so'rovini yuborishni, keyin esa exit() funksiyasini chaqirishni keraklisiz. Quyidagi ko'rinishda kodni qayta yozing:if ($well) {
bot('sendmessage', [
'chat_id' => $chats_id,
'text' => "Asslomu alaykum, <b>$chatn_id</b> ishonchli taksi xizmati kerak bo'lsa quyidagi botdan foydalaning.",
'parse_mode' => 'html',
'reply_markup' => json_encode([
'inline_keyboard' => [
[['text' => "Botdan foydalanish", 'url' => "https://t.me/taksi_navoiy_bot"]],
]
])
]);
// 10 soniyadan so'ng xabar o'chiriladi
bot('deleteMessage', [
'chat_id' => $chats_id,
'message_id' => $mid+1,
]);
}
exit();Bu kodda
exit() funksiyasini skriptning qolgan qismini tugatishdan keyin, Telegram xabarlarni qabul qilish jarayonini davom ettiradi. Umid qilamiz, bu o'zgartirish sizning muammolaringizni hal qiladi. Agar boshqa savollar yoki yordam kerak bo'lsa, menga xabar yuboring. Sizga yordam bera olishga tayyormisiz!Siz berilgan kod bilan JSON-ni oΚ»rganmoqchisiz. Bu PHPda JSON-ni oΚ»zgartirish va chiqarishni sozlash uchun ishlatiladi.
JSON_PRETTY_PRINT JSON-ni chiroyli shaklda koΚ»rsatadi, JSON_UNESCAPED_SLASHES bilan kichik chiziq-belgilar "\" belgisini oΚ»chiradi, va JSON_UNESCAPED_UNICODE JSON-ni Unicode belgilari bilan koΚ»rsatadi.Kodunuzda,
Quyidagi muammo va ularning hal qilinishi mumkin:
1. Ma'lumotlar bazasiga muvaffaqiyatli ulanishni tekshiring. Ulanishni tekshirish uchun,
2. Ma'lumotlar bazasidagi tablolar mavjud bo'lishini va so'rovlarning to'g'ri amalga oshirilayotganini tekshirib ko'ring. Agar tablolar mavjud emas yoki so'rovlar noto'g'ri amalga oshirilayotgan bo'lsa,
3. HTML formatida yuborilayotgan xabarlar kiritilganligini va xabarlarning to'g'ri yozilganligini tekshirib ko'ring. Agar HTML-markup xabarga to'g'ri qo'llanilmasa, xabar noto'g'ri ko'rinishi mumkin. Bunda xabar matni HTML formatida berilgan, lekin
Agar yuqoridagi tekshirishlardan keyin muammo aniqlanmagan bo'lsa, yoki muammo to'g'ri emasligini aniqlab bo'lmagan bo'lsa, ko'rsatgan kod ma'lumotlar bazasidan ma'lumotlarni to'g'ri olish uchun yaxshi ko'rinishda. Bunday holatda, kod to'g'ri ishlashiga ko'maklashadi. Agar avvalgi tekshirishlar keyin muammo aniqlangan bo'lsa, muammo haqida ko'proq ma'lumot berib, qo'llanilgan kodni tekshirib, muammo yo'qotilgan bo'lsa, muammo berilgan ma'lumotlarni sodda formatda ko'rsatishadi.
if bloki tekshirib ko'rsatilgan shart bajarilsa, "stats" bo'lgan bo'limida statistik ma'lumotlarni olish va ularga mos xabar yuborish lozim. Agar ushbu kod ishlamayotgan bo'lsa, yuqoridagi kodni tekshirib ko'rib, qaysi qatordan muammo paydo bo'lishini aniqlab olishingiz mumkin.Quyidagi muammo va ularning hal qilinishi mumkin:
1. Ma'lumotlar bazasiga muvaffaqiyatli ulanishni tekshiring. Ulanishni tekshirish uchun,
mysqli_connect funksiyasi yoki muvaffaqiyatli ulanish qilgan bo'lsa true qaytaradi.if (!$connect) {
die("Ulanishda xatolik: " . mysqli_connect_error());
}2. Ma'lumotlar bazasidagi tablolar mavjud bo'lishini va so'rovlarning to'g'ri amalga oshirilayotganini tekshirib ko'ring. Agar tablolar mavjud emas yoki so'rovlar noto'g'ri amalga oshirilayotgan bo'lsa,
mysqli_query funksiyasi false qaytaramaydi. Bunday holatda, muammo haqida ma'lumot chiqarib bering.3. HTML formatida yuborilayotgan xabarlar kiritilganligini va xabarlarning to'g'ri yozilganligini tekshirib ko'ring. Agar HTML-markup xabarga to'g'ri qo'llanilmasa, xabar noto'g'ri ko'rinishi mumkin. Bunda xabar matni HTML formatida berilgan, lekin
parse_mode qo'llanilmaygan bo'lishi mumkin. Agar xabarning HTML-formatida ko'rinishi kerak bo'lsa, parse_mode qiymati "html" bo'lishi kerak.Agar yuqoridagi tekshirishlardan keyin muammo aniqlanmagan bo'lsa, yoki muammo to'g'ri emasligini aniqlab bo'lmagan bo'lsa, ko'rsatgan kod ma'lumotlar bazasidan ma'lumotlarni to'g'ri olish uchun yaxshi ko'rinishda. Bunday holatda, kod to'g'ri ishlashiga ko'maklashadi. Agar avvalgi tekshirishlar keyin muammo aniqlangan bo'lsa, muammo haqida ko'proq ma'lumot berib, qo'llanilgan kodni tekshirib, muammo yo'qotilgan bo'lsa, muammo berilgan ma'lumotlarni sodda formatda ko'rsatishadi.
Bu koddan to'g'ri foydalanmoqchi bo'lsangiz, uning to'g'ri ishlashi uchun $type o'zgaruvchisining qiymati "supergroup" yoki "group" bo'lishi va $update->message->text qiymati mavjud bo'lishi kerak. Agar bu sharoitlar barchasi bajarilsa, koddagi shart rost ishlaydi.
Shart quyidagi ko'rinishda yozilgan:
Bu shartning to'g'ri ishlayishi uchun, agar $type "supergroup" ga teng bo'lsa yoki $type "group" ga teng bo'lsa va $update->message->text qiymati mavjud bo'lsa, kod bajariladi.
Agar siz faqatgina "group" bo'limini tekshirmoqchi bo'lsangiz va $update->message->text qiymati emas bo'lsa, quyidagi ko'rinishda yozing:
Bu shart faqatgina $type o'zgaruvchisining qiymati "group" bo'lgan holatda $update->message->text qiymati mavjud bo'lsa, kodni bajaradi.
Shart quyidagi ko'rinishda yozilgan:
if ($type == "supergroup" or ($type == "group" and $update->message->text)) {
// kodni bajarish
}Bu shartning to'g'ri ishlayishi uchun, agar $type "supergroup" ga teng bo'lsa yoki $type "group" ga teng bo'lsa va $update->message->text qiymati mavjud bo'lsa, kod bajariladi.
Agar siz faqatgina "group" bo'limini tekshirmoqchi bo'lsangiz va $update->message->text qiymati emas bo'lsa, quyidagi ko'rinishda yozing:
if ($type == "group" and $update->message->text) {
// kodni bajarish
}Bu shart faqatgina $type o'zgaruvchisining qiymati "group" bo'lgan holatda $update->message->text qiymati mavjud bo'lsa, kodni bajaradi.
parse mode > markdown HTML-ga konvertatsiya qilish uchun, matnni Markdown formatida yozishni talab qiladi, Markdown esa odatda tekshiruvni osonlashtiradi va matnni HTML-ga konvertatsiya qiladi. Misol uchun, Markdown-da # Header HTML-ga <h1>Header</h1> deb konvertatsiya qilinadi.parse mode > html esa, sizga kiritilgan matnni to'g'ridan-to'g'ri HTML formatiga o'girish imkonini beradi. Bu, matnni tahlil qilish va uni HTML-ga o'girishning oson yo'li.Sizning koddagi shart bu: "agar
$get o'zgaruvchisi 'administrator'ga teng bo'lmasa va $get o'zgaruvchisi 'owner'ga teng bo'lmasa" deb o'qiladi. Ya'ni, agar $get o'zgaruvchisi "administrator"ga yoki "owner"ga teng bo'lsa, shart bajarilmaydi. Boshqa so'zlar bilan, shartning bajarilmasligi halokatni bildiradi. Agar $get o'zgaruvchisi "administrator" yoki "owner" ga teng bo'lsa, bu amal bajariladi, aks holda bajarilmaydi.π2
Bu shart quyidagi ko'rinishda o'qiladi:
Bu shart ifoda
if ($row['account_type'] == 'HAYDOVCHI' && $row['taxi_own_text'] !== NULL) {Bu shart ifoda
$row massivida 'account_type' kalitining qiymati 'HAYDOVCHI' ga teng bo'lgan va 'taxi_own_text' kalitasi NULL ga teng bo'lmagan har bir qator uchun bajariladi. Bu shart ifodasi biror foydalanuvchining 'account_type' kalitasi 'HAYDOVCHI' ga teng va 'taxi_own_text' kalitasi NULL bo'lmaganligini tekshiradi.π2
if ($text == "/setting") {
$result = $user->query("SELECT * FROM users WHERE user_id = '$user_id'");
$resout = mysqli_fetch_array($result);
$title = $resout['music'];
$video = $resout['video'];
$book = $resout['book'];
$apk = $resout['apk'];
$exe = $resout['exe'];
$user->sendMessage([
'chat_id' => $user_id,
'message_id' => $mid,
'text' => "βοΈ <b>SOZLAMALAR</b>
βοΈ <i>Media fayllar qay tarzda qidirilishini sozlang.</i>",
'parse_mode' => "html",
'reply_markup' => json_encode([
'inline_keyboard' => [
[['text' => "π§ Musiqa", 'callback_data' => " "], ['text' => "Sarlavha", 'callback_data' => "#title"], ['text' => "Ijrochi", 'callback_data' => "#perforemer"], ['text' => "Izoh", 'callback_data' => "#caption"]],
[['text' => "π¬ Video", 'callback_data' => " "], ['text' => "Sarlavha", 'callback_data' => "#title"], ['text' => "Ijrochi", 'callback_data' => "#perforemer"], ['text' => "Izoh", 'callback_data' => "#caption"]],
[['text' => "π§ Kitob", 'callback_data' => " "], ['text' => "Sarlavha", 'callback_data' => "#title"], ['text' => "Ijrochi", 'callback_data' => "#perforemer"], ['text' => "Izoh", 'callback_data' => "#caption"]],
[['text' => "π APK", 'callback_data' => " "], ['text' => "Sarlavha", 'callback_data' => "#title"], ['text' => "Ijrochi", 'callback_data' => "#perforemer"], ['text' => "Izoh", 'callback_data' => "#caption"]],
[['text' => "π» Dekstop", 'callback_data' => " "], ['text' => "Sarlavha", 'callback_data' => "#title"], ['text' => "Ijrochi", 'callback_data' => "#perforemer"], ['text' => "Izoh", 'callback_data' => "#caption"]],
]
]),
]);
exit();
}Tez kunda yangilik.
β€βπ₯3β€1π1
1. Ikki tenglik belgi (`==`): Bu bo'shashgan taqqoslash operatori. U ikki o'zgaruvchining qiymatlarini taqqoslaydi, lekin ularning turlarini tekshirmaydi. Bu shuni anglatadiki, agar qiymatlar turli turlarga ega bo'lsa, PHP avtomatik ravishda birini ikkinchisiga aylantiradi.
Misol:
Bu kod "They are equal." deb chiqadi, chunki
2. Uch tenglik belgi (`===`): Bu qat'iy taqqoslash operatori. U faqat qiymatlarni emas, balki turlarni ham taqqoslaydi. Ikkala qiymat va tur bir xil bo'lsa, taqqoslash to'g'ri bo'ladi.
Misol:
Bu kod "They are not equal." deb chiqadi, chunki
Bu farqlardan kelib chiqib,
Misol:
$a = 42;
$b = "42";
if ($a == $b) {
echo "They are equal.";
} else {
echo "They are not equal.";
}
Bu kod "They are equal." deb chiqadi, chunki
$a (raqam) va $b (matn) bo'lsa-da, qiymatlari bir xil va PHP ularni avtomatik ravishda bir xil turga aylantiradi.2. Uch tenglik belgi (`===`): Bu qat'iy taqqoslash operatori. U faqat qiymatlarni emas, balki turlarni ham taqqoslaydi. Ikkala qiymat va tur bir xil bo'lsa, taqqoslash to'g'ri bo'ladi.
Misol:
$a = 42;
$b = "42";
if ($a === $b) {
echo "They are equal.";
} else {
echo "They are not equal.";
}
Bu kod "They are not equal." deb chiqadi, chunki
$a raqam (integer) va $b matn (string) bo'lib, ularning turlari bir xil emas.Bu farqlardan kelib chiqib,
=== operatoridan foydalanish sizning kodingizda aniqroq va xatolarni oldini oladi, chunki u qiymatlar va turlar bir xil ekanligiga ishonch hosil qiladi.This media is not supported in your browser
VIEW IN TELEGRAM
ππ’πππ¨ πππ«π¬π¬π’ π²π¨π¦π¨π§π’. π
π2
PHP-dagi
Bu shuni anglatadiki, agar
Sizning kodingizda:
Ushbu kodingizning ishlash tartibi:
1.
2. Agar bu shart to'g'ri (true) bo'lsa,
3. Agar bu shart noto'g'ri (false) bo'lsa,
Ternar operator yordamida kodingiz ancha qisqa va o'qilishi oson bo'ladi. Bu usul
Agar ternar operator o'rniga
Yuqoridagi ikki kod bir xil natijani beradi, lekin ternar operatori kodni yanada ixchamlashtiradi.
? va : belgilari ternar operator deb ataladi. Ternar operatori shartli ifodalarda foydalaniladi va if-else tuzilmasining qisqaroq yozuvi hisoblanadi. Ternar operator quyidagicha ishlaydi:$natija = (shart) ? true_holati_qiymati : false_holati_qiymati;
Bu shuni anglatadiki, agar
shart to'g'ri (true) bo'lsa, $natija true_holati_qiymati`ga teng bo'ladi, aks holda `$natija `false_holati_qiymati`ga teng bo'ladi.Sizning kodingizda:
$admin_name = isset($admins[$user_id]) ? $admins[$user_id] : "π¨π»βπ» <b>Operator</b>";
Ushbu kodingizning ishlash tartibi:
1.
isset($admins[$user_id]) shartini tekshiradi. Bu shart $admins massivida $user_id kaliti mavjudligini tekshiradi.2. Agar bu shart to'g'ri (true) bo'lsa,
$admin_name $admins[$user_id] qiymatini oladi.3. Agar bu shart noto'g'ri (false) bo'lsa,
$admin_name "π¨π»βπ» <b>Operator</b>" qiymatini oladi.Ternar operator yordamida kodingiz ancha qisqa va o'qilishi oson bo'ladi. Bu usul
if-else bloklari yozmasdan shartli tekshiruvlar va qiymat tayinlash ishlarini bajarishga imkon beradi.Agar ternar operator o'rniga
if-else blokidan foydalangan bo'lsak, kod quyidagicha bo'lar edi:if (isset($admins[$user_id])) {
$admin_name = $admins[$user_id];
} else {
$admin_name = "π¨π»βπ» <b>Operator</b>";
}Yuqoridagi ikki kod bir xil natijani beradi, lekin ternar operatori kodni yanada ixchamlashtiradi.