اطلاعیه

کاربر گرامی

به انجمن برنامه نویسی AnswerCenter.ir خوش آمدید

 برای استفاده از تمامی امکانات سایت لطفا در انجمن عضو شوید


جستجو در تالار

در حال نمایش نتایج برای برچسب های 'آنلاین'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالار ها

  • بخش اطلاعات اصلی انجمن
    • قوانین تیــم
    • انتقادات و پیشـــنهادات
    • اخبار تـــیم
    • تـولـیـداتـــ انـجـمــن
    • مرتبط با فروشگاه
    • درخواست ارتقا درجه کاربری
  • برنامه نویسی بیسیک4اندروید
    • آموزش های گام به گام برای مبتدی ها
    • پرسش و پاسخ (بیسیک4اندروید)
    • کتابخانه ها (Libraries)
    • درخواست Wrap کردن کتابخانه
    • ســـورس کـــدهـا
    • قطعه کدها (Code Snippets)
    • آموزش های تصویری
    • آموزش های متنی
    • ابزارهای B4A
    • برنامــه هـای سـاختـه شـده توسـط شمــا
  • برنامه نویسی اندروید استودیو
    • آموزش های گام به گام برای مبتدی ها
    • کتابخانه ها (Libraries)
    • ســـورس کـــدهـا
    • قطعه کدها (Code Snippets)
    • آموزش های تصویری
    • آموزش های متنی
    • پرسش و پاسخ (اندروید استودیو)
    • ابزار های اندروید استودیو
    • برنامــه هـای سـاختـه شـده توسـط شمــا
  • برنامه نویسی B4J
    • آموزش
    • پرسش و پاسخ
    • کتابخانه ها
    • قطــــــعه کــــــــد ها
    • ابزار ها
  • مـتـفـرقـه
    • بحث آزاد
    • نقد و بررسی برنامه ها
    • صندلی داغ انجمن
    • مسابقات انجمن
    • مرتبط با برنامه نویسی
    • بخش توسعه دهندگان
  • گرافیک
    • ابزارهای طراحی
    • آموزش گرافیک
    • عکس ها و تصاویر لایه باز
    • درخواست طراحی
    • نمونه کارها
  • HTML & PHP
    • ابزار مورد نیاز برنامه نویسی HTML و PHP
    • آموزش PHP
    • آموزش HTML
    • سوالات مربوط به PHP و Html
  • بخش ویژه (VIP)
    • محـــصولات کــاربران
    • درخواست آموزش
  • آرشیو
    • بایگانی

دسته ها

  • B4J
    • کتابخانه ها
    • سورس کد ها

دسته ها

  • Articles

38 نتیجه پیدا شد

  1. سلام به جامعه ی برنامه نویسان خالقان آفریده های دیجیتال بنده یه برنامه ای دارم که مشتریان یه درخواست و سفارشی برای من میفرستن که خُب قاعدتاً این درخواست ها به صورت آنلاین توی دیتابیس ثبت میشه حالا همین برنامه یه مدیریت داره که میخوام اون اطلاعات و درخواست ها رو دریافت کنم و دریافت هم میکنم اما میخوام که یه سرویسی توی برنامه مدیریت در حال اجرا باشه که بلافاصله پس از ارسال سفارش مشتری یه نوتیفیکیشن بیاد برام راهنمایی بسم الله ....
  2. سلام دوستان بنده یک بازی آنلاین ساده دو نفره ساختم که در مارکت های ایرانی منتشر شده. برای آنلاین شدنش یک سرور بازی داریم که در سرور مجازی فعاله و کاربران در برنامه با پورت و آی.پی به سرور بازی متصل و بازی میکنن. از زمانی که فیلترینگ همراه اول شدیدتر شده بازیکنانی که با اینترنت سیم کارت همراه اول وارد بازی میشن پیام هاشون پس از حدود 1 دقیقه و ارسال و دریافت میشه ! به حدی کند میشن که سرور بازی اون ها را قطع شده در نظر میگیره و ارتباطشون رو قطع میکنه. پشتیبان سرور مجازی میگه همراه اول سرور بازی شما رو و کلا ارتباط بازی شما رو شبیه به xpn در نظر میگیره و این مشکل رخ میده ! در حالیست که سرور بازی داخل ایران هم هست.(افرانت) عجیبه که بازی های آنلاین دو نفره ایرانی هیچکدام این مشکل رو ندارن.(اونایی که مشخصه از سوکت استفاده کردن) تنها ما این مشکل رو داریم ! از اساتید اگر دلیل این مشکل و راه حل اون رو میدونن خواهش میکنم راهنماییم کنن. پیشاپیش از راهنمایی شما سپاسگزارم
  3. سلام دوستان کسی میدونه چطور میشه عکس رو به دیتابیس آنلاین فرستاد ؟ پست هایی که در سایت بود رو نگاه کردم اما هیچکدوم درست جواب ندادن ممنون
  4. باسلام خدمت دوستان واساتید محترم انجمن آیا کسی از دوستان تونسته تا حالا چت تصویری آنلاین رو برای سایتی فعال کنه ؟ یا با بیسیک فور اینکار رو انجام بده ؟ دراینصورت اگه مراحل کار و روش کار و روش فعال کردن مدیا سرور red5 رو اینجا مطرح کنید ممنون میشوم ؟ جهت آشنایی دوستانی که ورود به این مسئله تا حالا نداشته اند وآشنایی باهاش ندارند این مطالب زیر عرض می شود : چت صوتی تصویری : برای شروع راهنمایی یکی از سایتهای پشتیبانی AVChat رو در لینک زیر میتونید مشاهده کنید : http://avchat.net/support/documentation#15 ملزومات فعال کردن چت تصویری آنلاین : 1- مدیا سرور A media server 2- اگه برای استفاده در سایت باشه که هاست مخصوص چت وسایت اصلی شما البته برای AVChat 3 مرتبط با این فایل Flash Player 11.1 نیازه روی دستگاه نصب باشه The need for Flash Player 11.1 starts with AVChat build 2330 of AVChat which adds H.264 encoding support. _____________ خب اما مدیا سرور که سروری مخصوص پخش فیلمهای آنلاین هست هم انواع مختلف داره که باید فایلهای یکی از اونا رو تهیه ونصب نمایید مثلا: Red5 (free open source) Wowza (commercial, free trial) Adobe Media Server (commercial, free edition) که برای نسخه دسکتاپ AVChat این نسخه های زیر پیشنهاد شده : AVChat (desktop) is compatible with: Red5 1.0.5+ Wowza 1.7.x -> Wowza Streaming Engine 4 Adobe Media Server 5 Starter, Professional and Extended Flash Media Server 2, 3, 3.5, 4 and 4.5 ولی برای نسخه موبایلی AVChat نسخه Red5 1.0.5+ پیشنهاد شده است . AVChat (mobile version) is compatible with: Red5 1.0.5+ __________ خب ملزومات و نحوه نصب سرورهای مورد نیاز AVChat هم در لینک بالا هست. شما می تونید فایلهای سرور و پلاگین Red5 رو از سایت زیر منوی دانلود ، دانلود نمایید: Red5 Media Server برای ساخت حساب کاربری واستفاده از نسخه پرو Red5 هم به لینک زیر میتونید مراجعه کنید Red5 Pro Infrared5 سایت اصلی پروژه Red5 در گیت هاب هم این لینک زیر هست : Project site: Red5 · GitHub صفحه راهنمای ویکی مخصوص Red5 هم این لینک زیر هست : Wiki: Home · Red5/red5-server Wiki · GitHub فایل جدید سرور Red5 و سورسهای مخصوص اون هم در لینک زیر هست : You can always find the latest downloads on the front page of the project site: Releases · Red5/red5-server · GitHub __________ دریافت فایلهای افزونه Red5 برای فعال سازی در اکلیپس : GitHub - Red5/red5-eclipse-plugin _________ البته Red5 نوشته شده با جاوا این موارد زیر اعم از پسوندهای ویدئویی و این پروتکل های زیر رو ساپورت میکنه : Red5 is an Open Source Flash Server written in Java that supports: Streaming Video (FLV, F4V, MP4, 3GP) Streaming Audio (MP3, F4A, M4A, AAC) Recording Client Streams (FLV and AVC+AAC in FLV container) Shared Objects Live Stream Publishing Remoting Protocols: RTMP, RTMPT, RTMPS, and RTMPE
  5. سلام و خسته نباشید خدمت اساتید محترم و اعضای عزیز انجمن. برای ارتباط با سرور و دریافت اطلاعات، مثلا دریافت اخبار یک سایت برای خبرخوان، راه های مختلفی نظیر استفاده از HttoJop (Post/Get) و Json و RSS(XML) وجود داره. شاید روش های دیگه ای هم باشه. میخوام بدونم بهترین روش و استاندارد ترین روش کدومه؟ و مزایا و معایب هر کدوم به چه شکل هست؟ پیشاپیش ممنون
  6. با عرض سلام خدمت دوستان خوبم. هدف ساخت یک نرم افزار اندرویدی و یک نرم افزار تحت وب است که نرم افزار اندرویدی مد نظر ما با زبان b4a نوشته شده و عکس را از گوشی گرفته و بهمراه توضیحات متنی ای که کاربر وارد میکند، عکس و متن را به نرم افزار تحت وبی که روی کامپیوتر نصب میشود، منتقل مینماید. برای دریافت عکس از کاربر در نرم افزار اندرویدی از contentChooser استفاده کرده ایم. حال برای انتقال به کامپیوتر دچار مسئله شده ایم. اگر بتوان از بستر تلگرام برای انتقال استفاده کرد، خیلی خوب است!! سپاسگزارم
  7. سلام ما نرم افزار هایی که برای پخش ویدیویی زنده با بیسیک 4اندروید فکر کنم موجود باشه ..... ولی من میخواستم بدونم برای بیسیک 4اندروید رادیو انلاین کسی پروژه ای انجام داده ؟ یا پروژه ای در سایت مرجع دیده ؟ لازم بذکر است که این سورس برای اکلیپس و اندروید استودیو موجود هستش ....
  8. سلام خسته نباشید دوستان من یه اپی نوشتم و در آن از دیتابیس آنلاین استفاده کردم سه مشکل بزرگ دارم 1- در دیتابیس ستون ها رو از نوع تکست تعریف کردم . اطلاعاتی که در دیتابیس ذخیره و از آن خوانده میشه به همراه .text نمایش داده میشه.با چه کدی میتونم .text از خونه های دیتابیس پاک کنم؟ (مورد اول خیلی مهمه لطفا کمک کنید) 2- وقتی خودم از دیتا بیس اطلاعاتی رو پاک میکنم (مثلا آی دی 10 و 11 ) اصلا عات جدید اون آیدی رو پر نمیکنه و از ادامه پر میشه 3- وقتی اطلاعات رو در برنامه میخونم کل اطلاعات ستونو میخونه در شکل اطلاعاتو با ستاره جدا کردم دوستا کمک لطفا ممنون
  9. سلام من در سایت بپرسم آموزش ارتباط با سرور آنلاین در b4a دیدم واجرا کردم اماخطا میده آموزش و عکس خطا رو میزارم دوستان کمک کنید لطفا کمک کنید ********************************************************** آموزش: به هاست مراجعه کردم و دیتابیس خودم را با نام beporsam_b4a ساختم، سپس به phpmyadmin مراجعه میکنم تا جدول مورد نظرم را بسازم. در محیط phpmyadmin روی نام دیتابیس کلیک و یک جدول با ۳ ستون می سازیم(id,username,password). جدولی با فیلدهای id,username,password می سازیم، که فیلد id از نوع INT و فیلدهای username و password از نوع Text هستند. شما هم جدول خود را طبق تصویر بالا با فیلدها و تیک های زده شده بسازید. و در نهایت دیتابیسی به نام beporsam_b4a و جدولی به نام b4a_register با سه فیلد id,username,password ساختیم. کدهای php برای انجام عملیات ثبت نام(موضوع برنامه ثبت نام است) <?php $conn = mysql_connect('localhost' , 'beporsam_b4a' , '12345'); mysql_select_db('beporsam_b4a',$conn); mysql_set_charset('utf8'); $username=$_POST['username']; $password=$_POST['password']; if($conn){ $result = "INSERT INTO b4a_register(username,password) VALUES('$username','$password')"; if(mysql_query($result)){ echo "Done"; }else{echo "Error";} } ?> ******************************************** در b4a بیسیک فور اندروید را اجرا کنید و ذخیره کنید. به دیزاینر رفته و دوتا EditText و دوتا Label و یک Button ایجاد کنید. #ApplicationLabel: B4A_register #VersionCode: 1 #VersionName: 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: unspecified #CanInstallToExternalStorage: False #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: True #End Region Sub Globals Private text_pass As EditText Private text_user As EditText Private btn_register As Button Dim ht As HttpJob End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("lmain") ht.Initialize("register",Me) End Sub Sub Jobdone (job As HttpJob) If job.Success = True Then Msgbox(job.GetString,"Success") Else ToastMessageShow("خطا در برقراری اتصال" , False) End If End Sub Sub btn_register_Click Dim send As String send = "username="&text_user.Text&"&password="&text_pass.Text ht.PostString("https://beporsam.ir/register.php",send) End Sub در قسمت Sub btn_register_Click در خط ۲ یک متغیر به نام send از نوع رشته برای ارسال مقادیر تعریف کردیم. در خط ۳ مقدار text_user را برابر username و مقدار text_password را برابر password قرار دادیم. در خط ۴ هم چون مقادیر ارسالی از نوع متنی هست یک ht.PostString تعریف و آدرس فایل Register.php و متغیر send را بهش دادیم. ********************************************* متن لیبل بر اساس یکی از فیلدهای دیتابیس باشه(بدین معنی که متن لیبل از دیتابیس فراخونی بشه) در اکتویتی اول دکمه ای قراردهید که با کلیک روی دکمه به اکتویتی دوم بریم. و کدهای بیسک در اکت جدید Sub Process_Globals Dim ht2 As HttpJob End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("lr") ht2.Initialize("read",Me) ht2.PostString("https://beporsam.ir/b4a/readdata.php","") End Sub Sub JobDone (job As HttpJob) If job.Success=True Then If job.JobName="read" Then ProgressDialogHide Label1.Text=ht2.GetString End If Else ToastMessageShow("خطا در برقرای اتصال",False) End If End Sub کدهای PHP برای فراخوانی اطلاعات از دیتابیس: <?php $conn = mysql_connect('localhost','نام دیتابیس','رمز عبور دیتابیس'); mysql_select_db('نام دیتابیس',$conn); mysql_set_charset('utf8'); $q="SELECT * FROM نام جدول"; $res1=mysql_query($q); $res2=mysql_fetch_array($res1); if($res2){ echo $res2[1]; } else { echo "Error"; } ?>
  10. به نام خداوند یکه و تنها. بازم یه آموزش از سری آموزشای ویژه ی استاد :دی بدون فوت وقت مطلب رو ادا کنیم بریم پی بدبختیمون با توجه به عنوان تاپیک و اسکرین دیگه نیازی به ادا کردن مطلب هم نیست . تنها نکته ای که قابل توجه هست اینه که برای ارتباط با سرور از کتابخانه جادویی رتروفیت استفاده شده این آموزش اولین آموزشی بود که واقعا به دل خودم نشست و باهاش حال کردم. خیلی ساده شیک و مجلسی : دی امیدوارم شما هم از این آموزش لذت و استفاده کافی ببرید. پسند فراموش نشه. چندبار باید بگم. موفق باشید به قول شهاب جونم کدهاتون بی ارور :دی لینک آموزش
  11. سلام دوستان عزیز بنده از کتابخانه googlecharts برای نمودار کشیدن استفاده میکنم اما با یه مشکلی مواجه شدم. به نظرم با اینترنت کار میکنه یعنی زمان کشیدن نمودار حتما به اینترنت احتیاج داره دوستان اگر کسی با این کتابخانه کار کرده لطفا راهنمایی کنه ممنونم از دوستان همیشه در صحنه
  12. سلام دوستان خسته نباشید من به یک مشکلی برخوردم و بازار برنامه من رو بخاطر این مشکل رد کرد مشکل اینه: - پرداخت اینترنتی باید از طریق درگاه‌های امن مورد تأیید بانک مرکزی، خارج از محیط برنامه و در مرورگر انجام پذیرد. لطفاً این مورد را اصلاح کنید. ولی من تاحالا همچین برنامه ای رو ندیدم و هیچ آموزشی هم در این رابطه موجود نیست لطفا راهنمایی کنن دوستان ممنونم
  13. سلام دوستان از کد زیر می خوام داده ها که از دیتابیس آنلاین می گیرم از آخر ارسال به دیتابیس آفلاین کنم اما نمی شود sql.ExecNonQuery("INSERT INTO tbl_1 ORDER BY id DES (id,name,matn,zaman) VALUES (null,'"&str2(1)&"','"&str2(2)&"','"&str2(3)&"')")
  14. سلام و عرض ادب خدمت اساتید و دوستان گرامی من درحال نوشتن یک اپلیکیشن آنلاین هستم این اپ نیاز به یک پنل مدیریت تحت وب داره لطفا اگر میتونید قیمتتون رو ارسال کنید برای بنده(هوای من رو داشته باشید ) پیشاپیش متشکرم
  15. با سلام خدمت اساتید محترم من حدود دو هفته پیش، یه سوال پرسیدم که متأسفانه هیچ کدوم از اساتید نتونستن جواب درست و حسابی بهش بدن (البته نمیدونم نتونستن یا نخواستن) به هر برای من این سوال پیش اومد که آیا من اولین کسی هستم که میخوام همچین کاری رو انجام بدم!! :nemidoonam: به نظرم رسید که یه تاپیک جدا بزنم و درخواست کنم که من رو راهنمایی بفرمایید، سوالم این هست: 1- (سوال اصلی): من میخوام یه سری داده رو بریزم روی دیتابیس سرور(دقت کنید که تعداد رکوردها بیش از یکی دوتاست). یه راهش اینه که با یه برنامه که مخصوص مدیر نرم افزار هست، داده ها رو از یه دیتابیس آفلاین یا یه فایل تکست، پست کنم به سرور که توی تاپیک قبلیم کسی نتونست مشکلم حل کنه!! قطعا یکی از راه ها هم اینه که دست اطلاعات رو وارد دیتابیس آفلاین کنیم! من سوال اینه که آیا راه آسون تری هم هست که این کار انجام بشه یا خیر؟!! (لطفا جواب کامل بدید) 2- برای انتقال داده از db سرور به db آفلاین بهترین راه همونی هست که آقاشهاب اسکندری توی این تاپیک آموزش دادن؟ json پس برای چیه و تفاوتش با این راه چیه؟ با تشکر از همه اساتید
  16. سلام دوستان من با استفاده از php یه فرم ارسال اطلاعات به دیتابیس طراحی کردم با insert ، مشکلی در ارسال اطلاعات ندارم ، ارسال میشه ولی توی کلمات فارسی مشکل داره و اینجور میشن توی دیتابیسشوش لطفا کمک کنید ، عکس رو هم ضمیمه میکنم تا خوب متوجه شید ، در ضمن unicode هم utf8_persian_ci هست و مشکل از این نیست
  17. با سلام خدمت اساتید من یه برنامه دارم که از دیتابیس آفلاین استفاده می کنه و از طریق دیتابیس آنلاین آپدیت می شه. توی آپدیت دیتابیس آفلاین مشکلی ندارم. مسئله من اینجاست که میخوام دیتابیس آنلاین به جای اینکه به صورت دستی توی سرور آپدیت بشه، از طریق یه برنامه اندروید دیگه، که در اختیار خودم هست آپدیت کنم، یعنی دیتبیس آفلاینی که خودم ساختم رو بهش بدم و رکوردهاش رو منتقل کنم به دیتابیس آنلاین. توی ساخت دیتابیس و جدول مربوطه مشکلی ندارم. مشکل اصلی من انتقال رکوردهای db آفلاین، یکی پس از دیگری به db آنلاین هست. ضمنا کدهایی که به کار می برم اینهاست: offTOon.Initialize("writekhtr",Me) cur=sql3.ExecQuery("SELECT * FROM khtr"&code.Text) Log("offrowcount="&cur.RowCount) For i=0 To cur.RowCount-1 cur.Position=i post="code="&code.Text&"&id="&cur.GetString("id")&"&titr="&cur.GetString("title")&"&matn="&cur.GetString("matn")&"&mozoo="&cur.GetString("mozoo") Log(post) offTOon_writekhtr.PostString("http://rahrovanevesal.ir/App/Rahrovan/plt/khtrWrite.php",post) Next اینم کدهای php <?php header('Content-Type: text/html; charset=utf-8'); $con=mysqli_connect("localhost","********","**********","*************"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $code=$_POST['code']; $id=$_POST['id']; $titr=$_POST['titr']; $matn=$_POST['matn']; $mozoo=$_POST['mozoo']; if($con){ mysql_set_charset('utf8'); } $sql="INSERT INTO khtr".$code." (id,titr,matn,mozoo) VALUES('$id','$titr','$matn','$mozoo')"; if (mysqli_query($con,$sql)) { echo "records Writed successfully"; } else { echo "Error writing: " . mysqli_error($con); } mysqli_close($con); ?> نتیجه این کدها اینه که توی دیتابیس آنلاین فقط یه سطربه من میده و اون هم آخرین رکورد دیتابیس آفلاین هست(ضمنا اون یه خط هم با حروف به هم ریخته هست!)ممنون میشم راهنمایی کنید
  18. هاست رایگان برای دیتابیس آنلاین

    درود بر همه ی کاربران عزیز انجمن بنده میخواستم یه هاست بخرم اما چون استفادم فقط درحد دیتابیس آنلاین هست گفتم یه هاست رایگان بگیرم . از دوستان اگه کسی یه هاست که قابلیت ساخت sql رو داشته باشه میشناسن معرفی کنن . با تشکر
  19. سلام دوستان! خوبین؟ عزیزان یه مشکلی داشتم اونم لیمیت دادن به دیتابیس آنلاین بود... یعنی من میخوام ۱۰ تا رکورد اول دیتابیس آنلاین رو بگیرم و وقتی اسکرولم به ته رسید بیام و ۱۰ تای بعدی رو بگیرم. ممنون میشم کمک کنید... گشتم اما چیزی پیدا نکردم!
  20. سلام. بعد از گذشت زمان زیادی، دوباره برگشتم تا این آموزش کامل رو براتون بذارم. بله عنوان آموزش ما هست: آموزش کامل ساخت فرم ثبت نام و ورود برنامه آنلاین. از مدیران محترم، خواهشمندم برچسب مهم روی این تاپیک بگذارند! شاید شما بخواهید یک برنامه آنلاین بسازید که دارای فرم ثبت نام و ورود باشه تا بتوانید کاربرانتون رو از طریق همین روش، مجبور به ثبت نام کنید تا مدیریت بهتری روی آنها داشته باشید. دوستان فقط یه نکته ای رو بگم: من خودم اگه بخوام برنامه فرم دار بسازم شک نکنید از همین روش هایی که دارم به شما عزیزان آموزش میدم استفاده میکنم و مطمئن باشید که بهترین روشیه که خودم میشناسم. اگه فکر میکنید اصولی و استاندارد نیست، حتما گوشزد کنید و من دیگه آموزشمو یا تعطیل می کنم و یا اصلاح. به دلیل کمبود وقت و... مجبور شدم این آموزش را به صورت قسمتی بگذارم. چنانچه قسمت جدیدی در تاپیک استارت اضافه شود، به اطلاع همگان میرسانم. قسمت اول: تحلیل ---------------------- خب قبل از هر کار دیگری، بیاید چیزی که میخوایم انجام بدیم رو تحلیل کنیم: اولش ما یه فرم برای ثبت نام کاربرمون نیاز داریم. تا کاربر بتونه ثبت نام کنه. این فرم، میتونه شامل ادیت تکست نام کاربری، پسورد، ایمیل و یا حتی شماره موبایل و ... باشه. اما در این آموزش، فقط نام کاربری و پسورد را دریافت میکنیم. در آخر هم یک دکمه برای تائید ثبت نام. و فایل PHP که در سرور خودمون داریم تا بتونیم اطلاعات ثبت نام رو بهش بفرستیم و همونجا اعتبار سنجیشون کنیم. اعتبار سنجی یعنی اینکه ببینیم آیا پسوردی که انتخاب کردن، کمتر از 6 کاراکتره؟ آیا فیلد پسورد، خالی رها نشده؟ آیا نام کاربری، دارای حروف غیر مجاز هست؟ حروف غیر مجاز کدوم ها باید باشند؟ آیا طول کاراکتر نام کاربری، بیشتر یا کمتر از حد مجاز است؟ و سپس در صورت عدم صلاحیت هر کدام از این ها، برنامه، پیغام خطایی به کاربر نشان دهد و کاربر، مجبور به اصلاح باشد. اگر خطایی وجود نداشت، در فایل PHP، اطلاعات کاربر، به بانک اطلاعاتی آنلاین فرستاده شود تا در آنجا ذخیره گردد و پیام تبریک عضویت، به کاربر درون برنامه، ارسال شود. شاید این سوال برایتان پیش بیاید که چرا اعتبار سنجی اطلاعات، توی خود برنامه صورت نمیگیره تا مجبور نباشیم به فایل PHP وصل بشیم و با زبان PHP این کارو انجام بدیم؟ در جواب باید بگم که اینکار، باعث میشه تا امنیت برناممون بهتر بشه! چون PHP سمت سروره و هک کردنش از هک کردن کدهای خود برنامه بیسیک، سخت تره! البته این فقط نظر منه! اگه بخواید میتونید این اعتبارسنجی هارو خودتون توی بیسیک بنویسید تا برنامه سریعتری داشته باشید! علاوه بر موارد ذکر شده، پس از تائید ثبت نام، کاربر، به اکتیویتی فرم ورود منتقل شود. فرم ثبت نام، علاوه بر موارد ذکر شده، باید دارای یک دکمه باشد که اکتیویتی فعلی را از بین ببرد و اکتیویتی فرم ورود را باز کند!(سوئیچ بین دو اکتیویتی ثبت نام و ورود) فرم ورود هم تقریبا شامل همین قضایا میشه! اما تفاوت هایی دارد! باز هم مثل قبل، اطلاعات ورودی، برای فایل PHP ارسال میشوند، بعد از اعتبارسنجی، اگر اعتبارسنجی درست بود و خطایی وجود نداشت(منظور این است که طرف میاد نام کاربریشو در یک ادیت تکست از برنامه وارد میکنه پسوردش هم در ادیت تکست دیگر وارد میکنه. بعدش اینا فرستاده میشن به فایل PHP و در آنجا، ما یه دستور برای اتصال به بانک اطلاعاتی میفرستیم. به بانک اطلاعاتی میگیم که بگرد دنبال کسی که نام کاربریش برابر ادیت تکست نام کاربری باشه و ببین آیا پسوردش همینه که نوشته؟ اگر همچین موردی توی بانک اطلاعاتی وجود داشت، پیام OK_OK را بنویس. بعدش در برنامه میایم بررسی میکنیم اگر نتیجه ای که از فایل PHP میاد مساوی با OK_OK باشه، کاربر مجاز به ورود است و اکتیویتی اصلی باید به او نمایش داده شود و اکتیویتی فعلی باید از بین برود! /پایان پرانتز)، همانطور که داخل پرانتز گفتیم، اکتیویتی اصلی برنامه(اکتیویتی ای که میخواهیم به کاربری که وارد شده نشان دهیم) به او نمایش داده شود و اکتیویتی فرم ورود، از بین برود تا کاربر با Back کردن در اکتیویتی اصلی، نتواند به این اکتیویتی دسترسی داشته باشد! البته همه این کارها، بعد از زدن دکمه ورود انجام میشود. فرم ورود، باید شامل یک دکمه دیگر نیز باشد، دکمه ای که به کاربر، اجازه رفتن به اکتیویتی ثبت نام میدهد و اکتیویتی فعلی را از بین میبرد!(سوئیچ بین دو اکتیویتی ثبت نام و ورود) علاوه بر اینها، شرایط دیگری نیز وجود دارند تا ما یک فرم ورود کامل و بی نقص داشته باشیم. ساختن فایل کوکی. البته من خودم اسمش رو گذاشتم کوکی. کوکی عبارتیه که توی مرورگرها استفاده میشه و مثلا وقتی میخواین وارد این انجمن بشوید یک گزینه دارد که نوشته: من را به یاد بیاور! اگر تیک این گزینه را بزنید، یک کوکی در تاریخچه مرورگرتان ثبت میشود که دفعات بعد که وارد یکی از صفحات انجمن میشوید، خود انجمن، در بین تاریخچه مرورگرتان، به دنبال یک کوکی میگردد که شناسه اش را قبلا خودش انتخاب کرده است. اگر کوکی پیدا شد، حال میبیند که چه نام کاربری برای این کاربر ذخیره شده است و سپس پسورد او را هم از توی کوکی میبیند. حالا همین اطلاعات را به فایل PHP میفرستد و مثل فرم ورود که کارش را توضیح دادم، به بانک اطلاعاتی رجوع میکند و در آنجا به جستجو میپردازد، سپس اگر همچین کاربری با این رمز پیدا شد، کاربر، به عنوان یک عضو به انجمن شناسانده میشود و دیگر نیازی به پر کردن فرم ورود انجمن نیست! خب چرا اینکار را روی فرم ورود برنامه پیاده نکنیم تا هر بار، کاربر، مجبور نباشد پسورد و نام کاربری خود را وارد کند؟ برای اینکار، نیاز به نوشتن یک فایل درون گوشی داریم تا پسورد و نام کاربری شخص استفاده کننده از این گوشی، درون آن فایل ذخیره شود و پس از ورود اول، این فایل تولید میشود و در ورودهای دیگر، از اطلاعات این فایل برای ورود استفاده شود! خب حالا یک شرح کامل از این قسمت فرم ها میدهم و تمام: ابتدا اکتیویتی main لود میشود. در این اکتیویتی طبق این دستورات شرطی عمل میکنیم: A- اگر فایلی به نام فایل کوکی مورد نظرمان وجود داشت،{ B- اگر اطلاعاتی شامل نام کاربری و رمز عبور داخل فایل کوکی وجود داشت،{ C- اگر پس از اتصال به دیتابیس و دریافت نتیجه از فایل PHP، نتیجه ما، OK_OK بود، {اکتیویتی اصلی برنامه را نمایش بده}}} / C- در غیر اینصورت فرم ورود را نمایش بده / B- در غیر اینصورت، فرم ورود را نمایش بده / A- در غیر اینصورت، فرم ورود را نمایش بده فکر میکنم تا اینجا کافی باشه و توجیه شده باشین که قراره چیکار کنیم. اگر سوال یا مشکلی داشتین، حتما مطرح کنید پایان قسمت اول / ادامه دارد... ----------------------------------- قسمت دوم: سشن ----------------------- دوباره سلام! با قسمت دوم آموزش ساخت فرم ثبت نام و ورود برنامه آنلاین در خدمت شما هستیم. ببخشید که یه مقداری دیر شد. خب در این قسمت میخواهیم درباره سشن صحبت کنیم و از اهمیتش در آموزشمون بگیم. احتمالا دوست دارید هرچه سریعتر بریم سر اصل مطلب و کدنویسی. ولی باید صبر کنید تا این مفاهیم رو بهتر بدونید و از اهمیتشون خبر داشته باشین تا بتونین از پایه به عمق مطلب پی ببرید! سشن عبارتیه که در طراحی صفحات وب با PHP کاربرد فراوان داره. بذارین من برداشت خودم رو از سشن براتون بگم: به نظر بنده، سشن مثل کارت شناسایی کاربر میمونه. به عبارت دیگه، سشن یعنی کد یا کدهایی برای شناسایی هر کاربر که از طرف سرور به اون کاربر داده میشه و فقط از طریق سرور و کدهای برنامه نویس در PHP قابل تغییره! نکته: قبلا فکر میکردم سشن فقط توی مرورگرها کاربرد داره و بیرون از اون کار نمیکنه. منظورم توی اپ های اندرویدی و... هستش. اما اشتباه میکردم! همین الآن که دارم این آموزشو براتون مینویسم، داشتم این قضیه رو توی "بیسیک 4 اندروید" و با "لوکال هاست Xampp" امتحان میکردم که متوجه شدم واقعا سشن توی بیسیک هم کار میکنه! بذارید سشن رو بیشتر تحلیل کنیم: با یک مثال شروع میکنیم. یک سایت چتروم را در نظر بگیرید. طبق مطالبی که در قسمت قبل گفتم، این چتروم، باید یک فرم ورود و ثبت نام داشته باشه بعلاوه تمام مواردی که در قسمت اول این آموزش گفتم. مثل کوکی، اعتبار سنجی، انتقال به صفحه اصلی و همچنین سشن. حال سوال این است که یک کاربر پس از انتقال به صفحه اصلی سایت چتروم، چگونه باید شناسایی شود؟ یعنی مثلا یک پیام در کادر "نوشتن پیام" مینویسد سپس بر روی دکمه ارسال کلیک میکند. پیام او برای همه کاربران از جمله خودش نمایش داده میشود. مثلا این متن پیام اوست: "(مدیر)حسین: سلام!" حتما در چتروم ها دیده اید که درجه کاربران هم کنار اسمشان قرار میگیرد. اما درجه و اسم او چگونه شناسایی میشود؟ شاید بعضی ها بگویند اسم او در کوکی وجود داشته. خب برای درجه چه جوابی دارید؟ درجه که در کوکی ذخیره نبوده و من بعید میدونم حتی اسم هم از کوکی فراخوانی شده باشه. من بهتون میگم. آیدی(id) این کاربر در سشن ذخیره شده! ما فقط آیدی کاربر را داشتیم اما توسط همین آیدی توانستیم اسم و درجه کاربر را هم از دیتابیس آنلاین بیرون بکشیم! سشن این امکان رو به ما داد تا پس از کلیک کردن بر روی دکمه ورود(در فرم ورود)، آیدی کاربر را در "سمت سرور" ذخیره کنیم و سپس از همان آیدی ذخیره شده، برای "بازیابی" تمامی اطلاعات موجود کاربر در دیتابیس، اقدام کنیم! در واقع، این همان کارت شناسایی ما بود. خب شاید بعضیها بپرسند چرا از کوکی برای این قضیه استفاده نکنیم؟! در جواب فقط میتونم بگم امنیت! فرض کنید ما از کوکی برای این کار استفاده کنیم، یک کاربر به اصطلاح جوجه هــکر میاید و با تغییر دادن آیدی خود در قسمت کوکی ها، خود را به جای مدیر یا... جا میزند و کارت شناسایی را جعل میکند! اما سشن چون در سمت سرور ذخیره میشود، کلاینت(کاربر)، نمیتواند آنرا تغییر دهد، مگر با دستوراتی که خود برنامه نویس PHP آنهارا اعمال کرده باشد! در اینجا صراحتا اعلام کردم که بیشتر باگ های امنیتی، تقصیر خود برنامه نویس است! بگذریم! نکته: در مرورگرها، پس از بستن تمامی صفحات سایت مورد نظر، اطلاعات سشن از بین میرود. در برنامه های اندرویدی، پس از بستن برنامه، یعنی فقط با دستور ExitApplication، سشن از بین میرود. اما با دستوراتی مانند Activity.Finish به احتمال خیلی زیاد، سشن از بین نمیرود و با بازگشت به برنامه، قابل بازیابی است! البته از بین رفتن سشن اصلا مهم نیست، چون دوباره میتواند به راحتی به وجود آید. برای اطلاعات بیشتر راجع به سشن، به این لینک مراجعه کنید! http://developer1.ir/php/Session.aspx دیدیم که سشن معجزه میکند و واقعا کاربرد دارد! از قسمت بعد، قصد داریم به کدنویسی و شروع کار بپردازیم! پایان قسمت دوم / ادامه دارد... ----------------------------------- قسمت سوم: شروع کدنویسی با بیسیک ----------------------------------------------- با قسمت سوم آموزش ساخت فرم ثبت نام و ورود برنامه آنلاین در خدمت شما هستیم. خب در این قسمت میخواهیم مستقیم بریم سراغ برنامه نویسی. اول از همه یه پروژه درست کنید و ذخیرش کنید. خب حالا کتابخانه JSON و HttpUtils2 را تیک بزنید. درباره جی سان مفصل بحث خواهیم کرد. کاری که میخواهیم انجام دهیم این است که از "اکتیویتی" Main برای اعتبار سنجی استفاده کنیم. برای همین هیچ "لی اوتی" برایش قرار نمیدهیم. حالا در اکتیویتی Main در تابع Globals این متغیر هارا تعریف میکنیم: Sub Globals Dim JSON As JSONParser Dim cookie As Map Dim php_connect As HttpJob End Sub سپس در تابع Activity_Create، این دستورات را قرار دهید: Sub Activity_Create(FirstTime As Boolean) If(File.Exists(File.DirInternal, "android_form.abc"))Then Try JSON.Initialize(File.ReadString(File.DirInternal, "android_form.abc")) cookie = JSON.NextObject php_connect.Initialize("validation", Me) php_connect.PostString("http://www.YourSite.ir/login.php", "username="&cookie.Get("username")&"&pass="&cookie.Get("pass")&"&isInProgram=itIs") Catch File.Delete(File.DirInternal, "android_form.abc") StartActivity("login") Activity.Finish End Try Else StartActivity("login") Activity.Finish End If End Sub در دستورات بالا، ابتدا، با اجرای برنامه، یک دستور شرطی پرس و جو میکند که آیا فایل کوکی ما به نام android_form.abc در گوشی کاربر موجود میباشد؟ و سپس سعی کردیم آنرا به فرمت جی سان بخوانیم و متغیرهای از قبل ذخیره شده داخل آنرا به متغیر cookie ربط میدهیم. سپس یک اتصال به فایل PHP داخل سرور میسازیم و برای این اتصالمون نام validation را انتخاب میکنیم. بعد آدرس فایل PHP را مینویسیم و متغیرهای خود را از برنامه، به روش پست، ارسال میکنیم. به جای www.YourSite.ir میتوانید آدرس سایت خود را وارد کنید. متغیر isInProgram هم برای تشخیص هویت کسی است که به سایت متصل میشود. یعنی با یک سری دستورات در فایل PHP میتوان بررسی کرد که آیا دسترسی کاربر مورد نظر به سایتمون، از طریق برنامه ای که در گوشی نصب کرده داده شده؟ اگر بله، او میتواند محتوای فایل را ببیند و دستورات برایش اجرا میشود و در غیر اینصورت(یعنی اگر با مرورگر سایت را باز کرده باشد) پیغام خطا برای او به نمایش در بیاید.(راجع به این مسئله، بعدا، بیشتر متوجه میشوید) و بعد گفتیم اگر در آن قسمت از برنامه خطایی ایجاد شد، دستورات داخل Catch انجام شود. یعنی فایل کوکی حذف شود و اکتیویتی لاگین یا ورود برای کاربر نمایش داده شود. و سرانجام گفتیم که اگر فایل کوکی وجود نداشت، اکتیویتی لاگین نمایش داده شود. و اما دستورات پس از اتصال به PHP در کجا باید قرار گیرند؟ این دستورات، در تابعی به نام JobDone قرار میگیرند. پس این تابع را در برنامه بنویسید: Sub JobDone (Job As HttpJob) If(Job.Success)Then Select Job.JobName Case "validation" If(Job.GetString = "OK_OK")Then StartActivity("dashboard") Activity.Finish Else File.Delete(File.DirInternal, "android_form.abc") StartActivity("login") Activity.Finish End If End Select Else Msgbox("Please Check Your Internet Connection!", "Error!") ExitApplication End If Job.Release End Sub این تابع، متغیری از پیش تعریف شده دارد به نام Job و تقریبا همه مقادیر بازگشتی داخل تابع، بر محور Job میچرخند. در خط دوم از یک دستور شرطی استفاده کردیم که اگر اتصال به فایل PHP موفقیت آمیز بود این دستورات را اجرا کن. در خط سوم، از سلکت استفاده کردیم چون ممکن است در یک اکتیویتی، بیش از یک اتصال به PHP وجود داشته باشد، پیشنهاد میشود، در این تابع، همیشه از سلکت استفاده شود. درواقع Job.JobName، همان نام اتصالمان است که میشود validation. سپس گفتیم اگر نتیجه ای که در PHP نوشته میشود یعنی Job.GetString برابر با مقدار OK_OK بود، بدان معنیست که کاربر با موفقیت لاگین شده. برای همین باید به اکتیویتی dashboard منتقل شود. اما اگر برابر با OK_OK نبود، فایل کوکی حذف شود و کاربر، به اکتیویتی لاگین منتقل شود. در واقع ما میخواهیم در فایل PHP کاری کنیم که اگر کاربر، در دیتابیس ما شناخته شده بود(اعتبار سنجی)، نتیجه OK_OK برگردانده شود و در غیر اینصورت، متن خطای خود را بر میگردانیم. دقت داشته باشید که تابع JobDone زمانی در برنامه اجرا میشود که اتصالمان انجام شده باشد. یعنی شرط وجود این تابع، در برنامه، بستگی به وجود و اجرای نقطه اتصال validation دارد! یعنی این دو دستور: php_connect.Initialize("validation", Me) php_connect.PostString("http://www.YourSite.ir/ login.php", "username="&cookie.Get("username")&"&pass="&cookie.Get("pass")&"&isInProgram=itIs") خب بگذریم! در آخر هم گفتیم اگر اتصال موفقیت آمیز نبود، خطایی بده مبنی بر اینکه اتصال اینترنت شما قطع است و باید آنرا چک کنید! خب این قسمت یکم طولانی شد و من هم خسته شدم! انشاءالله در قسمت های بعد، راجع به جی سان توضیح خواهیم داد. همچنین به سراغ PHP و نیز بانک اطلاعاتی خواهیم رفت و البته ساخت اکتیویتی های ورود و ثبت نام و دشبورد را به شما عزیزان آموزش خواهیم داد. پایان قسمت سوم / ادامه دارد... ------------------------------------- قسمت چهارم: جادوی PHP و JSON ----------------------------------------- درود دوستان عزیز! بخاطر غیبت این چند وقت و دیر شدن قسمت چهارم، جدا شرمنده! یکمی بی نظمی پیش اومده توی کارام که اصلا فراموش کردم براتون قسمت بعدی رو بذارم. البته فکر نکنید آماده هست ها تازه دارم به طور زنده براتون مینویسم. الآن ساعت 11:59 شبه و داریم وارد دوشنبه 16 آذر میشیم که حالا شدیم! :دی خب عزیزان در قسمت قبل اکتیویتی Main رو برنامه ریزی کردیم. با شروع این اکتیویتی، اتصال به فایل پی اچ پی درون سرور، آغاز میشه و نتیجه برگشتی از این فایل، سرنوشت برنامه رو مشخص میکنه! اما در قسمت قبل، حرفی از کدهای فایل PHP نزدیم! همچنین قرار بود توضیحاتی در رابطه با جی سان ارائه بدیم. من خودم به طور علمی تعریف جی سان رو نمیدونم ولی طبق تجربه ام، جی سان یک نوع ذخیره سازی اطلاعات با فرمت دقیق و دسته بندی های منظم و سازمان یافته است که اطلاعات{متنی} رو مانند نقشه، علامت گذاری میکنه و خلاصه دسترسی ما رو به اطلاعات آسان تر میکنه. البته برای استفاده از جی سان، شرایطی وجود داره. از مهمترین شرایط و اصول استفاده از جی سان، دانستن فرمت کلی و نقشه بندی جی سان است! بر همین اساس، ما میتوانیم فرمت جی سان را خودمان بنویسیم و خواندنش هم برایمان آسان تر میشود. قبل از جی سان: قبل از اینکه من جی سان رو بشناسم، همیشه تو این فکر بودم که چطور متغیرهای PHP رو میتوان به متغیر جاوا اسکریپت تبدیل کرد و اطلاعات رو بین این دو زبان، منتقل کرد. چون من طراحی وب کار میکردم، این دو زبان، یعنی پی اچ پی و جاوا اسکریپت، همیشه در تعامل بودند. بعد از جی سان: وقتی کمی با جی سان آشنا شدم دریافتم جی سان یک پل است برای ارتباط اطلاعات بین تمامی زبان های برنامه نویسی! اغراق نمیکنم. ساختار جی سان به قدری انعطاف پذیر است که در هر زبانی، به راحتی میتوان برایش کتابخانه درست کرد و البته کتابخانه های آماده و حتی الآن دیگر هسته برخی زبان ها نیز به جی سان، مجهز شده اند! فعلا، در این آموزش، ما از جی سان در فایل کوکی که ساختیم استفاده کردیم. احتمالا چون این قرار است یک فرم ساده باشد، برای کارهای دیگر استفاده نشود ولی شما میتوانید برای ارسال و دریافت اطلاعات از طریق Httputils 2، از جی سان به جای جدا سازی با # استفاده کنید. مثال کلی از فرمت جی سان: [{'val1':'value1', 'val2':'value2', others...}, {others...}, others...] با جستجوی آموزشهای جی سان، میتوانید با این فرمت، بیشتر آشنا شوید. خب دوستان عزیز، حال به سراغ فایل پی اچ پی میرویم. در قسمت قبل، از برنامه، فایل login.php را از سرورمان فراخوانی کردیم. در کنار این فایل، فایل دیگری نیز برای تنظیم اتصال به دیتابیس آنلاین، نیاز داریم. اسم این فایل جدید را، db.php میگذاریم. این فایل را در کنار فایل login.php در یک پوشه قرار میدهیم. محتویات فایل db.php: <?php $con = mysqli_connect("localhost","root","your_db_password","your_db_name"); mysqli_set_charset($con,"utf8"); //Check connection if(mysqli_connect_errno()){ echo "Error: ".mysqli_connect_error(); } ?> بجای your_db_password و your_db_name، به ترتیب رمز و نام دیتابیس مورد نظر رو وارد میکنیم و به جای root، یوزر نیم دیتابیس رو قرار میدیم. در اتصال به دیتابیس آنلاین چندین روش وجود دارد که ما در اینجا از روش خوب mysqli بهره میبریم. محتویات فایل login.php: <?php if(isset($_POST['isInProgram']) && $_POST['isInProgram'] == "itIs"){//&& = and require_once("db.php"); $users_number1 = mysqli_query($con, "SELECT * FROM users where username = '$_POST[username]' and password = '$_POST[pass]'"); $users_number2 = mysqli_num_rows($users_number1); if($users_number2 > 0){ session_start(); $_SESSION['logged'] = true; $_SESSION['user'] = $_POST['username']; //Other sessions can be set in here echo "OK_OK"; } else{ echo "NO_NO"; } mysqli_close($con); } else{ echo "Error 404: Web Page Not Found!"; } ?> در خط دوم یک دستور شرطی نوشتیم و بررسی کردیم که آیا isInProgram از قبل ارسال شده و درخواستی که از فایل PHP شده، آیا از داخل برنامه اندروید ما صورت گرفته؟ یا اینکه کسی صفحه وب ما را مستقیم باز نموده است؟ اگر صفحه وب را مستقیم باز کرده که این پیغام را نمایش بده: Error 404: Web Page Not Found و در غیر اینصورت، در خط سوم گفتیم که فایل db.php را لازم داریم تا بتوانیم متغیرهای مورد نیازمان را برای اتصال به دیتابیس، فراخوانی کنیم. در خط چهارم، در دیتابیس گشتیم و تمامی کاربرانی که یوزر نیم و پسوردشان برابر با یوزر نیم و پسورد موجود در کوکی بود، پیدا کردیم. در خط پنجم، تعداد آنها را در متغیر users_number2 ذخیره کردیم. نکته: قصد ما این بود که بفهمیم آیا همچین کاربری با نام کاربری یکتا و رمز عبوری که در زمان لاگین در کوکی ذخیره شده بود، در دیتابیسمان، موجود میباشد؟ در خط ششم گفتیم اگر تعداد از صفر بیشتر بود، یعنی همچین کاربری وجود داشت، دستوراتی را برایمان اجرا کن. البته شما میتوانید بر طبق سلیقه و وسواس خود، این دستور شرطی را تغییر دهید. از خط هفتم، این دستورات خاص، شروع میشوند و تا خط دوازدهم ادامه دارد. در خط هفتم گفتیم که سشن را برای ما استارت کن. برای هر نوع استفاده از سشن، این دستور استارت، اجباری است و باید قبل از هر دستور سشنی، نوشته شود. نکته: نوشتن و طراحی سشن ها، به نیاز و خلاقیت شما بستگی دارد! در خط هشتم، سشنی تعریف کردیم مبنی بر اینکه کاربر در حال استفاده از این برنامه، در حال حاضر، وارد سیستم ما شده است. و این یک مجوز موقت است که ما خودمان به طور دستی، به کاربر درون برنامه اندروید، اعطا کردیم. هر زمان لازم بود، میتوانیم بر اساس این سشن، به کاربر، مجوزهایی برای دسترسی به برخی دستورات و اطلاعات بدهیم. در خط نهم، نام کاربری او را که برگرفته از کوکی موجود در گوشی اش بود و از قبل، خودمان، صلاحیتش را تائید کرده بودیم، در یک سشن به نام user ذخیره میکنیم. در خط یازدهم، یک خروجی دادیم با محتوای OK_OK. این خروجی، همان Job.GetString است که در برنامه، دریافت میشود. یک بار دیگر به کدهای قسمت سوم آموزش مراجعه کنید تا بیشتر، هماهنگی بین این کدها را متوجه شوید. خروجی خط چهاردهم، چنان اهمیتی ندارد. فقط نمایشی است! در خط شانزدهم، اتصال به دیتابیس را قطع کردیم. امیدوارم این قسمت، چیزهای جدید یاد گرفته و به طور کامل، هماهنگی و ارتباط بین کدها را درک کرده و متوجه شده باشید. احتمالا در قسمت بعد، به ساختن دیتابیس آنلاین و جداول و تشریح آن بپردازیم. فکر کنم یه چند سالی باید صبر کنید :دی ساعت 2 بامداد دوشنبه 16 آذر 94 پایان قسمت چهارم / ادامه دارد... --------------------------------------
  21. سلام منم این کتابخونه رو میخام این یه کتباخونه برای کنترل دیتابیس آنلاین هست که توی سایت اصلی B4X موجوده اگر کسی دسترسی سایت b4x رو داره ممنون میشم دانلود کنه و برام آپ کنه RDC-Client.Zip
  22. دوره کامل آموزشی کار با جیسون ( Json )

    به نام خدا سلام خدمت تمامی کاربران عزیز و محترم. خب تا حالا شاید کلمه Json به گوشتون خورده باشید ! میدونید Json مخفف چیه ؟ JavaScript Object Notation دوست عزیزم استاد آرتا زحمت کشیدن و آموزش کار با Json رو که بیش از 1 ساعت آموزش هست رو برای ما آماده کردن .. توضیحات بیشتر از زبان استاد آرتا : توی این پکیچ اموزشی قصد داریم شما دوستان عزیز رو با json آشنا و نحوه استفاده از json و چگونگی اون رو بهتون اموزش بدیم. ما برای تبادل اطلاعات بین برنامه و سرور باید یکسری استاندارد ها رو رعایت کنیم که json از این موضوع مبرا نیست و باعث تبادل سبک و راحت بین سرور و برنامه ما هستش. توی این پکیج چی چیزهایی رو یاد می گیریم ؟ نحوه تعریف آرایه ها در PHP پی بردن به ماهیت json ایجاد ساختار دیتابیس و ارتباط با MYSQL گرفتن مقادیر انکد شده به صورت تکی و نمایش در برنامه کرفتن مقادیر انکد شده به صورت همگانی و نمایش آند در برنامه گرفتن مقادیر دیتابیس و نمایش در ListView گرفتن مقادیر و نمایش در Multi Panel نکات اضافی در حین آموزش ~~~~~~~~~~~~~~~~~~~~~~~~~~ دموی این آموزش رو میتونید از آپارات تماشا کنید مشاهده دمو پیشنهاد میکنم کسایی که دوست دارن حرفه ای کار کنن به هیچ وجه این آموزش رو از دست ندن لینک تهییه آموزش
  23. سلام دوستان! چند سوال دارم در رابطه ساخت برنامه نظرسنجی آنلاین! 1 - سرور با چه مشخصات نیاز دارم ؟ 2 - چطوری می تونم این نظر سنجی رو بسازم ؟ (یعنی باید یه فایل آپلود کنم روی هاست ؟ (اگه ممکنه کد رو بگذارید)) 3 - نتایج رو باید به چه صورت بگذارم ؟ 4 - چطوری جلوگیری کنم از دوبار نظر دهی ؟
  24. سلام این هم بازی نقطه خط آنلاین که حدود 4 ماه زمان صرف شده . نظرتون رو در مورد بازی بدید. دانلود از کافه بازار
  25. با سلام و خسته نباشید خدمت اساتید محترم. این اولین تاپیک من در این سایته. امیدوارم مفید باشه. قبلش باید بگم که من در بیسیک 4 اندروید خیلی تازه کار هستم و فقط یه اپ آزمایشی تاحالا نوشتم ولی با زبان هایی مثل HTML و CSS و JS و PHP خیلی سر و کار داشتم. تو این چند وقت خیلی از نرم افزار ها رو آزمایش کردم و فعلا b4a رو انتخاب کردم تا ببینم چی میشه! خب دیگه میریم سر اصل مطلب: همونطور که خیلیا میدونند، الآن آموزش رایگان برای اتصال به اینترنت و آنلاین شدن در b4a خیلی کمه. حالا من میخوام تجربه های شخصی خودمو در اختیارتون بذارم(خودم از سایتای خارجی مخصوصا سایت اصلی b4a یعنی b4x یاد گرفتم) هزینه آموزش هم یک صلواته. ابزار مورد نیاز: نرم افزار b4a نرم افزار xampp (اگر میخواهید به صورت آفلاین و بدون سرور به php متصل بشوید) پیشنهاد میشود در این آموزش حتما از این نرم افزار استفاده کنید. خب اول یه توضیحی درباره xampp بدم. این نرم افزار، به شما کمک میکنه تا بدون نیاز به هزینه کردن و خریدن هاست و دامنه، راحت بتونید یه هاست مجازی روی کامپیوتر خودتون راه اندازی کنید و از تمام ویژگی های mysql و php استفاده کنید! آخرین نسخه xampp رو از اینجا به رایگان دانلود کنید. حالا میخوایم کمی درباره نحوه اتصال به php و ... بیشتر توضیح بدیم: چون اندروید به طور مستقیم نمیتونه به سرورهای روی اینترنت وصل بشه، پس باید به طور غیر مستقیم و از طریق فایل php وصل بشه. این مساله در مورد خیلی از ابزار و نرم افزارها و زبان های برنامه نویسی دیگه هم صدق میکنه(مثل نرم افزار یونیتی که مربوط به بازی سازیه). به طور معمول و در برنامه نویسی تحت وب(وبسایت)، 5 تا زبان معروف برای برنامه نویسی وب وجود دارند که عبارتند از HTML و CSS و Javascript یا همون JS و PHP و ASP که ما با اون 3 تای اولش کاری نداریم. یعنی میمونه php و asp که چون من تخصصی در asp ندارم، سراغش نمیرم و به php میپردازم. البته asp هم فکر کنم به b4a وصل میشه اما باهاش کاری نداریم. لازم به ذکره که اون سه تای اولی، همگی زبانهای سمت کاربر هستند. (یعنی مثلا من با مرورگرم میام تو سایت basic4android.org و اطلاعاتی که دریافت میکنم و میبینم و میتونم توی inspect element تغییر بدم رو میگن سمت کاربر که در رابطه با مسائل امنیتی کمتر مطرح میشن). php و asp هم زبانهای سمت سرور هستند که از طریق اونها میشه کاربرها رو به هم مرتبط کرد و کدهای این زبان ها از دید ما مخفیه(در inspect element نمایش داده نمیشوند) خلاصه بهتون بگم که اگه قصد ساختن برنامه به این سبک داشته باشین، باید مسئله امنیت رو جدی بگیرین که اونم مربوط به توابع امنیتی php میشه. حالا ما فقط به php میپردازیم. برای ارسال اطلاعات از طریق php، دو روش وجود داره. یکی روش get و دیگری روش post مطمئنا همتون در نوار آدرس مرورگر حروف عجیب و غریب که تو در تو و پشت سر هم هستند رو دیدین. به عنوان مثال: basic4android.org/index.php?app=forums&module=post&section=post&do=new_post&f=13 خب در این آدرس، اول علامت سوال رو پیدا کنید. تا علامت سوال، یه آدرس معمولیه اما بعد از اون یک سری اطلاعات نوشته شده و این اطلاعات از طریق روش get ارسال شده اند! و بین هر متغیر، یک علامت & وجود دارد. همونطور که اشاره کردم، به این روش، روش get میگویند. روش post، یک روش زیر پوستی است که در آن، اطلاعات، بدون اینکه آشکار شوند، رد و بدل میشوند(یعنی، ما نمیتوانیم آنرا مثل روش get ببینیم) شما هم آزمایش کنید نرم افزار xampp رو که دانلود کردید، نصب کنید(مثل نصب های معمولی). بعد از نصب، آنرا اجرا کنید و حالا محیط کنترل پنل زمپ رو میبینید. در ستون Service دقت کنید و اگر علامت ضربدر مانند روی آن میبینید، کافیست یکبار روی آن کلیک کنید تا گزینه ها فعال شوند و اگر نمیبینید که هیچ. با دقت در ستون module، گزینه های Apache و MySQL رو میبینید(به بقیه گزینه ها کاری نداشته باشید). دکمه Start که در ستون Actions قرار دارد و مربوط به Apache و MySQL میشود را جداگانه(روی هر دو) کلیک کنید چند لحظه صبر کنید و سپس دکمه Admin را برای هر دو کلیک کنید. 2 صفحه در مرورگرتان باز میشود که یکی مربوط به MySQL و دیگری مربوط به دامین هاستتون میشه. تبریک میگوییم، نرم افزار راه افتاد. ولی هنوز یکسری تنظیمات مونده. به آدرس محل نصب xampp بروید و وارد پوشه htdocs بشوید. یک نیو فولدر در داخل htdocs بسازید و اسمش را هرچه میخواهید بگذارید(مثلا xampp) و همه محتویات داخل htdocs را داخل آن پوشه ای که ساختید کات کنید. حالا دوباره داخل htdocs، پوشه دیگری بسازید به نام b4a_php_test و واردش بشوید. مرورگر را باز کنید و آن صفحه با حاشیه های نارنجی که توسط نرم افزار باز شد، رفرش کنید(اگر بسته بودین، دوباره گزینه Admin کنار Apache را بزنید). در مرورگرتون، 2 تا پوشه میبینید که همون پوشه های ساخته شده توسط شما هستند. از این به بعد اگه پروژه جدید php داشتین به همین سبک در htdocs پوشه بسازید و از طریق این قسمت در مرورگر، اونهارو باز کنید. خب حالا برگردید به پوشه b4a_php_test و یک فایل txt ایجاد کنید و داخلش بنویسید: <?php $my_name = $_GET['name']; $my_age = $_GET['age']; echo "My Name Is $my_name And I Am $my_age Years Old."; ?> و در هنگام ذخیره کردن، اسم فایل رو بذارید index.php یعنی با فرمت php حتما باید باشه. مقدار Encoding رو هم UTF-8 بگذارید. حالا دوباره از طریق نرم افزار xampp به مرورگر برگردید و از بین لیست پوشه ها که در مرورگر نمایش داده میشود، b4a_php_test را انتخاب کنید و نتیجه را ببینید. احتمالا با 2 تا ارور مواجه شدید و متنی که ناقص است. خب حالا کافیه در نوار آدرس مرورگر، این را در ادامه آدرس وارد کنید: ?name=mohammad mahdi&age=19 سپس اینتر بزنید. نتیجه این است: My Name Is mohammad Mahdi And I Am 19 Years Old خب شما موفق شدید با برنامه نویسی php و از طریق دستور get، اولین متنتون رو ارسال کنید. حتی دیگه میتونید هر چیزی خواستید وارد کنید و مقدار ها رو عوض کنید و کلی کار دیگه و حتی اینهارو با توابع php ترکیب کنید و خروجی مورد نظرتون رو نشون بدین. خب از الآن به بعد میخوام بهتون یاد بدم که چطوری از طریق b4a و روش get با php ارتباط برقرار کنیم دقیقا همین متن رو میتونیم بفرستیم توی برنامه مون در b4a و حتی میتونیم مقدار name و age رو از طریق b4a بهش بدیم و نتیجه رو با php درست کنیم و دوباره به b4a ارسال کنیم(مقدار را به b4a برگردانیم). خب حالا که کدهای سمت سرور رو درست کردیم، میریم سراغ کدهای b4a: اول یه پروژه ایجاد کنید. این کتابخونه ها رو هم باید داشته باشه: Core و HttpUtils2 و Network حالا دو تا دکمه توی صفحه بذارین. دقت کنید که حتما 2 تا دکمه بذارین. اگر خواستین براشون تکست بذارید تا قاطی نکنید. این کد رو به اسم لایوت خودتون داخل Activity_Create بذارین تا لایوت اجرا بشه Activity.LoadLayout("Layout1") این dim رو هم در داخل ساب Globals اضافه کنید Dim InsertPerson As HttpJob و حالا یک ساب برای کلیک روی دکمه شماره یک اضافه کنید: Sub Button1_Click InsertPerson.Initialize("InsertP", Me) InsertPerson.download2("http://Your_IPv4_Address/b4a_php_test/index.php", Array As String ("name", "mohammad mahdi", "age", "19")) End Sub و ساب کلیک دکمه شماره دو: Sub Button2_Click InsertPerson.Initialize("InsertP2", Me) InsertPerson.download2("http://Your_IPv4_Address/b4a_php_test/index.php", Array As String ("name", "Ali", "age", "27")) End Sub توضیحات: منظور از IPv4 _address چیست؟ cmd یا خط فرمان را باز کنید و بنویسید: ipconfig و اینتر بزنید و بگردید دنبال عبارت IPv4 Address که فکر کنم 3 تا گزینه پیدا میکنید با آدرس آی پی مختلف. اونی که اولش 10 داره(برای من اینه 10.3.0.1) رو به جای Your_IPv4_Address قرار دهید. اگر تا آخر ساخت برنامه پیش رفتید و برنامه کار نکرد، 2 تای دیگه رو هم امتحان کنید. چرا باید به جای آدرس دامنه، آدرس آی پی وارد کنم؟ چون داریم با شبیه ساز هاست کار میکنیم و این شبیه ساز روی کامپیوتر ماست، و برای ارتباط با این شبیه ساز هاست، باید برنامه مان را از شبیه ساز موبایل، مثل بلو استکس یا AVD یا YouWave اجرا کنیم. در این صورت، باید به جای آدرس دامنه، از IPv4 Address استفاده کنیم. چنانچه فایل شما روی هاست واقعی میباشد، آدرس خود فایل php رو به طور مستقیم، به جای این آدرس، بنویسید. خب در اینجا ما به برنامه گفتیم که اگر دکمه لمس یا کلیک شود، InsertPerson که همان HttpJob میباشد، تنظیم شود و اطلاعاتی از قبیل mohammad mahdi با شناسه name و 19 با شناسه age به روش get، به فایل php ارسال شوند و سپس، برنامه، نتیجه را دانلود کند.(به جای "mohammad mahdi" و "19" میتوانید مقدار یک EditText یا چیز دیگری را جایگزین کنید و آنرا گسترش دهید) همچنین در دکمه شماره دو هم مقادیر دیگری را به وسیله نام InsertP2 و در قالب HttpJob، به فایل php فرستادیم و نتیجه را از فایل php دانلود کردیم. حالا این ساب رو هم کپی کنید و داخل کدهاتون بذارید Sub JobDone (Job As HttpJob) If Job.Success = True Then Select Job.JobName Case "InsertP" Msgbox(Job.GetString, "محمد مهدی") Case "InsertP2" Msgbox(Job.GetString, "علی") End Select Else ToastMessageShow("Error: " & Job.ErrorMessage, True) End If Job.Release End Sub توضیحات: این ساب که به کتابخانه HttpUtils2 وابسته هست، نتیجه رو پس از کلیک بر روی دکمه ها بررسی میکنه و به ازای نتیجه، دستورات ما رو انجام میده و در برنامه اونهارو اجرا میکنه. همونطور که میبینید، HttpJob در اینجا فراخوانی شده است و از اینجا به بعد همه چیز روی محور HttpJob میچرخد. یعنی HttpJob نتیجه را مدیریت میکند. حالا ما اینجا Job رو جایگزین HttpJob کردیم. در خط دوم یک دستور شرطی مینویسیم که اگر اتصال برقرار شده باشد، یعنی موفقیت آمیز باشد، و نتیجه اش True باشد شامل این دستورات باشد. و بعد از Select و Case استفاده کردیم که اگر InsertP به عنوان JobName اجرا شده بود(یعنی کلیک روی دکمه شماره یک)، در Msgbox، نتیجه کار(یعنی Job.GetString) نمایش داده شود و تایتل مسیج باکس، محمد مهدی شود. و در Case بعدی گفتیم اگر InsertP2 اجرا شود(کلیک روی دکمه شماره دو)، به همان ترتیب، یک مسیج باکس با تایتل علی نمایش داده شود. البته ما میتوانستیم هر 2 دکمه را از InsertP تغذیه کنیم و دیگر لازم به InsertP2 نبود. اما هر دستوری که مینوشتیم، برای هردو، یکسان در نظر گرفته میشد و در تایتل مسیج باکس ها فقط محمد مهدی نوشته میشد. البته به سلیقه خودتان و کاربرد برنامه تان، میتوانید هر روشی که خواستید انجام دهید و هر چند تا که خواستید از نام مشترک استفاده کنید و هر چقدر که میخواهید از Case ها استفاده کنید و حتی اگر نمیخواهید، استفاده نکنید. در آخر هم Select را میبندیم و سپس از Else استفاده میکنیم. یعنی اگر موفقیت دریافت نتیجه، True نبود، متن ارور(Job.ErrorMessage) را نمایش بده. و سپس برای پایان کار، از Job.Release استفاده میکنیم. خب امیدوارم تا اینجا مفید بوده باشه و اصول اولیه و پایه را فرا گرفته باشید. برای ارتباط با بانک اطلاعاتی روی هاست(MySQL)، نیاز به دستوراتی دارید که در php نوشته میشوند و کافیست نتیجه همان دستورات را از طریق روشی که امروز یاد گرفتید، به b4a بفرستید تا بتوانید با بانک اطلاعاتی ارتباط برقرار کنید. انشاءالله سر فرصت در همین تاپیک یا تاپیکی دیگر درباره دستورات MySQL در PHP توضیح خواهم داد. اما اگر عجله دارید میتوانید در اینترنت به جستجو بپردازید و آموزش های مفیدی را در این زمینه بیابید. در این رابطه، در اینترنت، آموزش های فراوانی وجود دارد.