Yangi formatda davom etish uchun: https://uzfor.net/view.php?act=post&id=42070
Postga havola
MrAnonim [143] [off]
Johncms 2-darslik
JohnCMS #2darslik (+/-)
Salom hurmatli foydalanuvchilar JohnCMSni o'rganishda davom etamiz. Bugun sizlar bilan yana bir asosiy boshlang'ich ma'lumotlarni o'rganamiz. Bu: MySQL so'rovlari! SQL => Structured Query Language (Tartiblangan So'rovlar Tili)ning biz uchun ahamiyati juda katta. Har bir xabar qoldirish, ma'lumotni taxrirlash, yoki mana shu kutubxona ma'lumotlarini har biri MySQL orqali amalga oshirilgan. SQL so'rov mysql_query() buyrug'i orqali amalga oshiriladi. Bu buyruq php tiliga tegishli. ( ) belgilari orasiga esa SQL tilida so'rov yoziladi va qavsdan " bilan ajratiladi: mysql_query("SELECT COUNT(*) FROM `users`"); ushbu sql so'rov `users` jadvalidagi qatorlar sonini sanaydi. Shu usul orqali saytda qancha foydalanuvchi bor ekanini bilib olish mumkin. Natijasi haqida batafsil keyinroq. SQL tilida siz uchun hozir bilishingiz kerak bo'lgan buyruqlar quyidagilar: SELECT => tanlash UPDATE => mavjud ma'lumotni yangilash INSERT => Yangi qatorga yangi malumot kiritish DELETE => Tanlangan qator(lar)ni o'chirish SQL so'rovda jadval va ustun nomlari ` ` belgilari orasida bo'ladi, ma'lumot (valuega mos o'zbekcha so'z topolmadim) esa ' ' belgilari orasiga yoziladi. Keling, oddiy sql buyruq yozib ko'ramiz: ID:1dagi userning kirish huquqlarini (`rights`) oddiy user (nol)ga to'g'rilaymiz: mysql_query("UPDATE `users` SET `rights` = '0' WHERE `id` = '1'"); Diqqat qilsangiz, rostdan ham bu tartibga solingan so'rov ekanini anglaysiz. Yuqoridagi so'rovni taxlil qilamiz: `users` jadvali yangilansin: `id` 1ga teng bo'lgan qatorning `rights` ustuni 0ga o'zgartirilsin (SET) Demak, sql buyruqdan keyin birinchi navbatda jadval nomi yozilishi kerak. Yuqoridagi buyruqdan foydalangan holda shu kabi yangilash (UPDATE) buyruqlarini o'zingiz yoza olasiz deb o'ylayman)) Endi keyingi so'rov bilan tanishamiz: o'chirish (DELETE) Kelinglar, forumdan id:28-postni o'chirib tashlaymiz: mysql_query("DELETE FROM `forum` WHERE `id` = '28'"); Taxlil qilamiz: `forum` jadvalidan o'chirilsin: `id` ustuni 28ga teng bo'lgan qator. Menimcha bu ham oz-moz tushunarli bo'ldi. Endi yana bir sql buyruq: yangi qator kiritish (INSERT). Kelinglar, id:7 foydalanuvchiga system xabari yuboramiz. Oldiniga qiynalmaslik uchun xabar matnini o'zgaruvchiga biriktirib olamiz: $xabar = 'Xurmatli foydalanuvchi, saytimizdan foydalanayotganingiz uchun minnatdormiz!'; Endi esa sql buyruq: mysql_query("INSERT INTO `cms_mail` SET `user_id` = '0', `from_id` = '7', `text` = '".$xabar."', `time` = '".time()."', `sys` = '1'"); Taxlil: `cms_mail` jadvaliga yangi qator kiritilsin(INSERT) : `user_id` nol deb, `from_id` 7 deb, `matn` $xabar o'zgaruvchisi deb, `time` hozirgi vaqt deb (time() haqida sal keyin), `sys` 1 deb belgilansin. Menimcha bu ham oz-moz tushunarli bo'ldi. Keling endi time() haqida to'xtalib o'tamiz: serverlarda vaqtni aniq belgilash uchun Unix Time Stamp ishlatiladi. Bu 1970-yil, 1-yanvar soat 00:00 (GMT London vaqti bilan)dan beri shu vaqtgacha o'tgan soniyalar yig'indisiga teng. Misol uchun bir sutkada 86400 soniya borligini bilsak, 1970-yildan beri ehh-hee. . . Bu bilan ishlashni osonlashtirish uchun esa time() tegi qo'llaniladi. Bu avtomatik tarzda unix time stampdagi hozirgi vaqtni (yani soniyalar yig'indisini) kiritadi. Shunday qilib, siz endi MySQL haqida yuzaki ma'lumotga egasiz. Kelinglar endi ozgina ichkariroq kiramiz)) mysql_query("SELECT COUNT(*) FROM `users`"); ushu so'rov endi nimani anglatishini bilasiz, bu `users` jadvalidagi qatorlar sonini sanaydi. Faqat. . . Bu sanaydi holos! Sizga hech qanday ma'lumot taqdim etmaydi! Endi biz bu ma'lumotni brauzerga chiqaramiz: $natija = mysql_result(mysql_query("SELECT COUNT(*) FROM `users`")); echo $natija; Bu holatda server brauzerga qatorlar sonini sanab, javobini (mysql_result) brauzerga yuboradi. Endi keyingi qo'shimcha buyruqqa o'tamiz: mysql_fetch_assoc() Bu buyruq tanlangan qatordagi har bir ustun ma'lumotlarini esda saqlab turadi, foydalanish uchun. Misol uchun, ID:1ning shahsiy malumotlarini olaylik: $sql = mysql_query("SELECT * FROM `users` WHERE `id` = '1'"); Agar qatordagi ustunlardan faqat bittasi emas, hammasi kerak bo'lsa, *ni tanlash orqali erishamiz. $admin = mysql_fetch_assoc($sql); Ko'rib turganingizdek, bu safar sql buyruqni uchuga sql buyruq yozmasdan, boshqacha usulda, o'zgaruvchi ($sql) orqali amalga oshirdim. Lekin hozir qaysi usulni qo'llashni farqi yo'q. Demak, hozirda $admin o'zgaruvchisi `users` jadvalidagi `id` ustuni 1ga teng bo'lgan qatorga teng. Bu qatordan turli ustun malumotlarini olish uchun esa biz o'zgaruvchidan $admin[] ko'rinishida foydalanamiz. Ya'ni: echo 'Ismi: '.$admin['imname']; Yoki: echo 'O\'zi haqida: '.$admin['about']; Menimcha tushunarli bo'ldi. Endi punktuatsiyaga ham to'xtalib o'tsam, phpning o'z imlo qoidalari mavjud bo'lib, bu qoidalarga amal qilinmagan taqdirda server buyruqlarga javob berishdan bosh tortib, brauzerga oppoq sahifani jo'natib yuboradi. Shu sababli ham imlo qoidalariga doim amal qiling: Birinchi navbatda apostrof (') belgisidan ehtiyot bo'ling, agar bu belgi kerakli joyda yozilmay qolsa yoki keraksiz joyda foydalanilsa, bu xatolik degani. O' harfini ifodalashda O\' usulidan foydalaning, chunki apostrof belgisi "value"ning boshlanish va tugash nuqtalarini belgilab beradi. Masalan: echo 'Salom dunyo!'; bu holatda brauzerga yuklanadigan so'zning boslanish va tugash nuqtalari apostrof bilan belgilangan. Lekin agarda: echo 'Dunyo go'zal!'; deb yozsangiz, server boshlanish nuqtasini aniqlab, lekin tugash nuqtasi qaysi biri ekanini anglay olmay qoladi va bu ham xatolik keltirib chiqaradi. Apostrofga olingan "value"ning ichiga php buyruq, o'zgaruvchi va hokazo yozilgan taqdirda uni ikki tomonidan apostrof va nuqta bilan ajratishni unutmang: echo 'Salom, '.$admin['name'].' aka!'; Menimcha bugunga shu ma'lumotlar yetarli. Shu bilan 2-dars ham tamom bo'ldi. Darsga fikr bildirish va baholab borishni unutmang!