رفتن به مطلب

سورس " ثبت اطلاعات دستگاه" در دیتابیس آنلاین


arastooms

ارسال‌های توصیه شده

با سلام به همه عزیزان

:53:  :53:  :53:  :53:  :53:  :53: 

در حال آموزش php هستم و قصد دارم برای اولین تمرین
آموزشها و مطالب و مشکلات رو با شما عزیزان به اشتراک بگذارم 
تا با هم بتونیم این مثال رو جلو ببریم

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

:53:  :53:  :53: 

 

 

 

 

سطح :

پیشرفته ( حرفه ای )

 

 موضوع :

ثبت اطلاعات دستگاه ( گوشی کاربر ) در دیتابیس آنلاین و هاست شخصی ( بدون موارد تکراری )

 

 

هدف :

ثبت اطلاعات دستگاه هر کاربر به محض بازکردن برنامه 
و در صورتی که برنامه قبلا ثبت شده بود (( با تشخیص از روی سریال گوشی )) تاریخ روز را در دیتابیس ثبت میکند
این دیتابیس شامل همه مشخصات برنامه و دستگاه است که به توسعه دهنده در داشتن آمار نصب 
آمار استفاده از برنامه 
آمار دستگاه های استفاده شده و ...
را میدهد

 

پیش نیاز های این موضوع:

1-داشتن هاست و دامنه ( برای ایجاد دیتابیس و ثبت و ذخیره اطلاعات)

2- آشنایی با( ایجاد دیتابیس / یوزر دیتابیس / اتصال یوزر و دیتابی / انتقال فایل ها به پوشه ای خاص) در هاست مربوطه

3-اطلاعات لازم در مبحث php 

 

پیش فرض های مسئله :

 

1- وجود یک دیتابیس در هاست با 13 ستون به نامهای 

id
date
time
appname
package_name
app_ver
store_seller
phone_manufacturer
phone_model
phone_product
phone_id
phone_sdkversion
version_android

این هم عکس دیتابیس

%D8%B9%DA%A9%D8%B3_%D8%AF%DB%8C%D8%AA%D8

 

 

 

2-   کتابخانه  AriaAsynkTask  نوشته استاد امین شاهدی ( اخرین نسخه را نصب کنید )

 

http://answercenter.ir/topic/14604-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D9%88%D9%86%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-ariaasynktask/page-1

 

 

 

3-کد های بیسیک 

#Region  Project Attributes 
	#ApplicationLabel: ارسال اطلاعات دستگاه 
	#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 Process_Globals
	Dim phone1 As Phone						'پیش فرض در بیسیک موجود است
	Dim phon_id As PhoneId  				' پیش فرض در بیسیک موجود است
	
'این مقادیر به صورت مثال هست و شما می توانید در برنامه مقدار دهی کنید 
	
		Dim version		 As String 			' نیازی نیست به مقدار دهی
		Dim date		 As String  		' نیازی نیست به مقدار دهی
		Dim time		 As String  		' نیازی نیست به مقدار دهی
		Dim phone_manufacturer As String 	' نیازی نیست به مقدار دهی
		Dim phone_model		 As String  	' نیازی نیست به مقدار دهی
		Dim phone_product	 As String  	' نیازی نیست به مقدار دهی
		Dim phone_id		 As String  	' نیازی نیست به مقدار دهی
		Dim phone_sdkversion As String  	' نیازی نیست به مقدار دهی
		Dim version_android	 As String  	' نیازی نیست به مقدار دهی
		
		Dim app_ver		 As Int 	
		Dim package_name As String 	
		Dim appname		As String 	
		Dim store_seller As String 	
End Sub

Sub Globals
'////////////////////////////////////////////////////////////////////////
		Dim aria As AriaAsyncTask
		Dim dlr As AriaAsyncTaskDownloader
'-------------------------------------------------------------------
			
		Dim mydate As String 
		Dim mytime As String 
		Dim myappname As String 
		Dim mypackage_name As String 
		Dim myapp_ver As String 
		Dim mystore_seller As String 
		Dim myphone_manufacturer As String 
		Dim myphone_model As String 
		Dim myphone_product As String 
		Dim myphone_id As String 
		Dim myphone_sdkversion As String 
		Dim myversion_android As String 
			
'//////////////////////////////////////////////////////////////////////			

	Private Button1 As Button

End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("layout_test")
all_string
End Sub


Sub aria_DoInBackground(Params() As Object) As Object
	Try
		Dim result As String = dlr.Get(Params(0)).POST(Params(1)).String
		Dim str() As String = Regex.Split("#",result)
		Msgbox(result,"")
		
			mydate=str(0 )
			mytime=str(1)
			myappname=str(2)
			mypackage_name=str(3)
			myapp_ver=str(4)
			mystore_seller=str(5)
			myphone_manufacturer=str(6)
			myphone_model=str(7 )
			myphone_product=str(8)
			myphone_id=str(9)
			myphone_sdkversion=str(10)
			myversion_android=str(11)
			
		Return "done"
	Catch
		Log(LastException)
		Return "error"
	End Try
	
End Sub

Sub aria_OnPostExecute(Result As Object)
	Log("اینجا نتیجه رو مینویسه")
	Log(Result)
End Sub


Sub Button1_Click

'//////////////////////////////////////////////////////////////////////////////////////////
aria.Initialize("aria")
dlr.Initialize(aria)

	If dlr.IsConnected Then
	aria.Run(Array As String("http://xxxx.ir/testfile/information.php","date="&date&"&time="&time&"&appname="&appname&"&package_name="&package_name&"&app_ver="&app_ver&"&store_seller="&store_seller&"&phone_manufacturer="&phone_manufacturer&"&phone_model="&phone_model&"&phone_product="&phone_product&"&phone_id="&phone_id&"&phone_sdkversion="&phone_sdkversion&"&version_android="&version_android))
	
	Else
	ToastMessageShow("disconnected",False)
End If
'//////////////////////////////////////////////////////////////////////////////////////////////

End Sub															   

'////////////////////////

#Region تنظیمات و اختصاص مقادیر و داده ها ی دستگاه به پارامتر ها
Sub all_string

	 app_ver = 6 
	 package_name  = "arastoo.m.s.ir"  
	 store_seller  = "google play" 
	 appname 		= "ارسال اطلاعات"
	 
	 phone_manufacturer = phone1.Manufacturer
	 phone_model 		= phone1.Model
	 phone_product 		= phone1.Product
	 phone_id 			= phon_id.GetDeviceId
	 phone_sdkversion	= phone1.SdkVersion	
		Version1
	 version_android 	= version
	 date				= DateTime.Date(DateTime.Now)
	 time 				= DateTime.Time(DateTime.Now)
'
'♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
'♥♥♥♥   log کنترل مقادیر در     ♥♥♥♥♥♥♥♥
'♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
Log ("date="&date )								'♥
Log ("time="&time )								'♥
												'♥
Log ("appname="&appname )						'♥
Log ("package_name="&package_name )				'♥
Log ("app_ver="&app_ver )						'♥
Log ("store_seller="&store_seller )				'♥
												'♥
Log ("phone_manufacturer="&phone_manufacturer )	'♥
Log ("phone_model="&phone_model )				'♥
Log ("phone_product="&phone_product )			'♥
Log ("phone_id="&phone_id )						'♥
Log ("phone_sdkversion="& phone_sdkversion)		'♥
Log ("version_android="&version_android )		'♥
'♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
End Sub
Sub Version1 
	
	If phone1.SdkVersion="19" Then
	version="4.4.2"
	else If phone1.SdkVersion="18" Then
	version="4.3"
	else If phone1.SdkVersion="17" Then
	version="4.2.2"
	else If phone1.SdkVersion="16" Then
	version="4.1.2"
	else If phone1.SdkVersion="15" Then
	version="4.0.3"
	else If phone1.SdkVersion="14" Then
	version="4.0"
	else If phone1.SdkVersion="13" Then
	version="3.2"
	else If phone1.SdkVersion="12" Then
	version="3.1"
	else If phone1.SdkVersion="11" Then
	version="3.0"
	else If phone1.SdkVersion="10" Then
	version="2.3"
	else If phone1.SdkVersion="9" Then
	version="2.3.3"
	else If phone1.SdkVersion="8" Then
	version="2.2"
	else If phone1.SdkVersion="7" Then
	version="2.1"
	else If phone1.SdkVersion="4" Then
	version="1.6"
	else If phone1.SdkVersion="3" Then
	version="1.5"
	else If phone1.SdkVersion="21" Then
	version="5.0"
	else If phone1.SdkVersion="20" Then
	version="4.4.4"
	else If phone1.SdkVersion="22" Then
	version="5.1.1"
	else If phone1.SdkVersion="23" Then
	version="6.0-6.0.1"
	else If phone1.SdkVersion>"23" Then
	version="bozorgtar-az-6"
	else If phone1.SdkVersion<"3" Then
	version="kuchektar-az-1.5"
	End If
	
End Sub
#End Region

'///////////////////////////

Sub Activity_Resume

End Sub
Sub Activity_Pause (UserClosed As Boolean)

End Sub

4- کد های php و فایل php 

<?php

$con = mysqli_connect('localhost',xxxxx','xxxxx','xxxxxn');
mysqli_set_charset($con,"utf8");

$date = $_POST['date'];
$time = $_POST['time'];
$appname = $_POST['appname'];
$package_name = $_POST['package_name'];
$app_ver = $_POST['app_ver'];
$store_seller = $_POST['store_seller'];
$phone_manufacturer = $_POST['phone_manufacturer'];
$phone_model = $_POST['phone_model'];
$phone_product = $_POST['phone_product'];
$phone_id = $_POST['phone_id'];
$phone_sdkversion = $_POST['phone_sdkversion'];
$version_android = $_POST['version_android'];

if($con->query("INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer) VALUES ('$date','$time','$appname','$package_name','$app_ver','$store_seller','$phone_manufacturer')")===true){
			echo  "done";
			}
?>

:areuok:  :areuok:  :areuok:

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خوب 
با سلام به همه اساتید عزیز 
اولین مشکل برنامه اینه که در دیتابیس فقط 7 مورد اول رو ثبت میکنه !!!!
یعنی فقط 

date
time
appname
package_name
app_ver
store_seller
phone_manufacturer

 

با توجه به اینکه همه موارد در لوگ دیده میشه و مقدار ها پٌر هستند چرا مقادیر در دیتابیس وارد نمیشه؟؟
مجبت میکنید در صورت راهنمایی من کد ها رو تغیر میدم و نتایج رو اعلام میکنم تا عزیزان و دوستان هم با خطا ها و هم علت بروز خطاها آشنا بشن

با تشکر 
 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

شما اومدی مقدار هارو با پست گرفتی و ذخیره کردی تو یه متغیر

خوب توی دستور Insert چرا همه شون رو وارد نکردی؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خوب مشکل همینجاست که اگر مقدار پارامتر ها بیشتر از 7 تا بشه در دستور insert دیگه هیچ کاری انجام نمیده و اطلاعات رو به دیتابیس منتقل نمیکنه 

خطایی هم اعلام نمیکنه 

 

 در واقع دستور اگه به صورت زیر باشه  که کامل همه 12 تا استرینگ رو شامل میشه به مشکل میخوره 

"INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android) VALUES ('$date','$time','$appname','$package_name','$app_ver','$store_seller','$phone_manufacturer','$phone_model,'$phone_Product','$phone_id','$phone_sdkversion','$version_android')")===true){
لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطو جان

توی کد php به شکل زیر کار کن که ارور رو ببینی

if($con->query()){
        
    }else{
        echo $con->error;
        //or
        echo mysqli_error($con);
    }

اولی رو تست نکردم

دومی تست شدست

امتحان کن با هردو

قبل از ریجکس هم ، نشون بده که خروجی چی هست که ببینی ارور هاشو اگر موجوده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطو جان

توی کد php به شکل زیر کار کن که ارور رو ببینی

if($con->query()){
        
    }else{
        echo $con->error;
        //or
        echo mysqli_error($con);
    }

اولی رو تست نکردم

دومی تست شدست

امتحان کن با هردو

قبل از ریجکس هم ، نشون بده که خروجی چی هست که ببینی ارور هاشو اگر موجوده

شهاب عزیز مرسی که پست رو کنترل میکنی  و راهنمایی میکنی 

امید وارم همیشه شاد و سلامت باشی رفیق 

( اول بگم هنوز کد های بالا که گفتی شرط بزارم رو عوض نکردم و طول این مدت داشتم روی php پاین کار میکردم )

من php رو به این صورت قرار دادم که باز هم مشکل داره همون مشکل که هیچ عکسالعملی نشون نمیده

<?php

//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//مشخصات دیتابی درون هاست/////////////////////////////////////////////
$servername = "localhost";
$username = "xxxxx";
$password = "xxxxxx";
$dbname = "xxxxxxxxxxxxx";
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
// داده های ارسال از طرف بیسیک 4 اندروید /////////////////////////
$date = $_POST['date'];
$time = $_POST['time'];
$appname = $_POST['appname'];
$package_name = $_POST['package_name'];
$app_ver = $_POST['app_ver'];
$store_seller = $_POST['store_seller'];
$phone_manufacturer = $_POST['phone_manufacturer'];
$phone_model = $_POST['phone_model'];
$phone_product = $_POST['phone_product'];
$phone_id = $_POST['phone_id'];
$phone_sdkversion = $_POST['phone_sdkversion'];
$version_android = $_POST['version_android'];

//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android)
    VALUES ('$date','$time','$appname','$package_name','$app_ver','$store_seller','$phone_manufacturer','$phone_model,'$phone_Product','$phone_id','$phone_sdkversion','$version_android')";
    // use exec() because no results are returned
    $conn->exec($sql);
    echo "New record created successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
	
	
?>

 و وقتی صفحه وب رو از مرورگر لود میکنم این پیام رو میده ؟؟

 

INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android) VALUES ('','','','','','','',','','','','')
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','','','','')' at line 2

ممنون میشم راهنمایی بفرمایید 

:heart:  :heart:  :heart:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android) VALUES ('','','','','','','',','','','','')
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','','','','')' at line 2

ممنون میشم راهنمایی بفرمایید 

:heart:  :heart:  :heart:

اوه اوه 

یه مقدار ((((    '      )))   کم داره ...

خطای داشتم تو تایپ 

کنترل میکنم خبر میدم 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خوب مشکل اول  حل شدددددددددد
حطا در تایپ نادرست بود ....
دقت کنید در تایپ پارامتر ها مخصوصا ((  "   و    '    )) 
و حالا می بینید که در دیتابیس مشخصات گوشی به راحتی ثبت شد 
مشکل بعدی وجود نداشتن حروف فارسی هست 
که ئر php قبلی دیتابیس مشکلی با این مورد نداشت 
ولی با تغییر کد ها باید پارامتر ها رو utf8 تعریف کنیم 

%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%

 

 

می بینید که اسم برنامه که فارسی بوده خوب نوشته نشده 

و حالا اگر در مرور گر آدرس فایل php رو بزنیم می بینیم که به درستی نوشته شده 

 

New record created successfully

خوب مشکلاتی که الان در گیرش هستیم 
1- چاپ نشدن فارسی در دیتابیس هست ((  اساتید راهنمایی بفرمایند بنده تصیح کنم ))
2- ذخیره شدن تکراری دستگاه ها (( که در پست بعدی با  قرار دادن یک شرط در فایل php  این موضوع رو کنترل خواهیم کرد))
 

:heart:  :heart:  :heart:  :heart:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطو جان برای فارسی کردن چارست دیتابیست کد زیر رو قرار بده بعد از کانکت شدن به بانک

یعنی اولین کوئری بعد از ساخت $con باشه

mysqli_set_charset($con,"utf8");
لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

ارسطو جان برای فارسی کردن چارست دیتابیست کد زیر رو قرار بده بعد از کانکت شدن به بانک

یعنی اولین کوئری بعد از ساخت $con باشه

mysqli_set_charset($con,"utf8");

با خطا مواجه میشه و در خطا مینویسه 

[24-Aug-2016 17:26:45 UTC] PHP Warning:  mysqli_set_charset() expects parameter 1 to be mysqli, object given in /home/xxxxxx/xxxx/xxx_php/information6.php on line 29

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطو جان من متوجه نشدم شما دارید با pdo کار میکنید یا mysqli

مشخص کنید این رو چون توی یه پست pdo میذارید تو یکی mysqli

من pdo ؤو وارد نیستم و کار نکردم باهاش

کدی که بهتون دادم ، کاملا تست شدست و توی پروژه های خودمم دارم ازش استفاده میکنم...

خط 29 رو چک کنید

فایلتون چرا _php هست :D

لینک ارسال
به اشتراک گذاری در سایت های دیگر

:crazy:  :crazy:  شهاب جان تا قبل از مطالعه این لینک که تفاوت این دو رو میگه قصد داشتم از pdo  استفاده کنم چون فکر میکردم امنیتش بیشتره

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

برای علاقه مندان هم این لینک رو مطالعه بفرمایید ( کوتاه و مختصر تفاوت این دو رو گفته ))

 

http://baboon.ir/pdo-%D8%AF%D8%B1-%D9%85%D9%82%D8%A7%D8%A8%D9%84-mysqli-%DA%A9%D8%AF%D8%A7%D9%85-%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D8%B1%D8%AF%D8%9F/#

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خوب بعد از  مطالعه لینک بالا تصمیم میگیریم که با mysqli  کار کنیم و
کد های ما در فایل php  به صورت زیر خواهد بود 
که کد معرفی شده توسط استاد اسکندری عزیز 

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

<?php
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//مشخصات دیتابی درون هاست/////////////////////////////////////////////
$servername = "localhost";
$username = "یوزر نیم دیتابیس رو بنویسید";
$password = "پسورد دیتابیسرو بنویسید";
$dbname = "اسم دیتابیس رو بنویسید";
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
// گرفتن داده های ارسال شده از طرف بیسیک 4 اندروید  /////////////////////////
$date = $_POST['date'];
$time = $_POST['time'];
$appname = $_POST['appname'];
$package_name = $_POST['package_name'];
$app_ver = $_POST['app_ver'];
$store_seller = $_POST['store_seller'];
$phone_manufacturer = $_POST['phone_manufacturer'];
$phone_model = $_POST['phone_model'];
$phone_product = $_POST['phone_product'];
$phone_id = $_POST['phone_id'];
$phone_sdkversion = $_POST['phone_sdkversion'];
$version_android = $_POST['version_android'];
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

//برای تشخیص حروف فارسی در دیتابیس آنلاین این گزینه رو اضافه میکنیم
mysqli_set_charset($conn,"utf8");

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";

$sql = "INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android)
VALUES ('$date','$time','$appname','$package_name','$app_ver','$store_seller','$phone_manufacturer','$phone_model','$phone_Product','$phone_id','$phone_sdkversion','$version_android')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

?>

تا اینجا اگر موفق بودید 
باید دیتابیسی شبیه به عکس زیر داشته باشید با مشخصات دستگاه خودتون 

و می بینید که به صورت تکراری هم دستگاه ها ذحیره شده 

در پست بعدی با قرار دادن یک شرط سعی میکنیم از ذخیره داده های تکراری یک دستگاه جلو گیری کنیم

 

%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خوب در این پست میایم کد های شرطی و مقایسه رو در دیتابیس اجرا میکنیم 

میگیم دستگاهی که به دیتابیس اطلاعات ارسال کرده چک کن 

ببین سریال دستگاه در دیتابیس هست یا نه 

اگر نیست به عنوان دستگاه جدید همه مشخصات رو بریز تو دیتابیس

اگر هست مقادیر آخرین data و time رو به ما برگردون در بیسیک 4 اندروید 

که به کاربر نشون بدیم و بگیم 
"" عزیز دل برادر به برنامه خوش اومدی آخرین اری که اومدی فلان تاریخ و فلان ساعت بوده  آفرین شیطون""
 

کد های php  رو پایین  میفرستم 
و قسمت برگردوندن مقادیر رو به برنامه بیسیک 4 نتونستم اجرا کنم 
و کار با کتابخونه استاد شاهدی رو خوب بلد نیستم 
از عزیزانی که در این زمینه اطلاعاتی دارند خواهش میکنم کد های برگردون دو مقار رو به کد های زیر اضافه کنند 
خطوط 47 تا 50 کد زیر 

<?php
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//مشخصات دیتابی درون هاست/////////////////////////////////////////////
$servername = "localhost";
$username = "tططططططط";
$password = "طططططط";
$dbname = "ططططط";
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
// داده های ارسال از طرف بیسیک 4 اندروید /////////////////////////
$date = $_POST['date'];
$time = $_POST['time'];
$appname = $_POST['appname'];
$package_name = $_POST['package_name'];
$app_ver = $_POST['app_ver'];
$store_seller = $_POST['store_seller'];
$phone_manufacturer = $_POST['phone_manufacturer'];
$phone_model = $_POST['phone_model'];
$phone_product = $_POST['phone_product'];
$phone_id = $_POST['phone_id'];
$phone_sdkversion = $_POST['phone_sdkversion'];
$version_android = $_POST['version_android'];
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
//برای تشخیص حروف فارسی در دیتابیس آنلاین این گزینه رو اضافه میکنیم
mysqli_set_charset($conn,"utf8");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";


 //اینجا میایم کنترل میکنیم اگر دستگاه شماره سریالش تکراری بود
 // مقدار تاریخ وساعت قدیمی که آخرین اتصالش بوده رو به بیسیک برگردون
 // و بعد 
 // تاریخ و ساعت  جدید رو جایگزین کنترل
 //در صورتی که شماره سریال تکراری نبود یعنی دستگاه جدید هست و بیا همه مشخصات رو در دیتابیس ثبت کن
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
$sql = "SELECT * FROM app_information WHERE phone_id = '$phone_id'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
	
	echo "این دستگاه از قبل نصب شده است";
    // اینجا باید مقادیر تاریخ قدیمی و زمان قدیمی رو برگردونیم به بیسیک 4 اندروید
	// که محاسبه کنیم 
	// و به کار بر بگیم به برنامه خوش اومدی و آخرین بازدید شما مثلا 5 روز پیش بوده است
	// 
	
   
} else {
	
	$sql = "INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android)
	VALUES ('$date','$time','$appname','$package_name','$app_ver','$store_seller','$phone_manufacturer','$phone_model','$phone_Product','$phone_id','$phone_sdkversion','$version_android')";

			if ($conn->query($sql) === TRUE) {
				echo "دستگاه جدید به دیتابیس افزوده شد";
			} else {
				echo "Error: " . $sql . "<br>" . $conn->error;
					}
		}
$conn->close();
?>

:heart:  :heart:  :heart:  :53:  :53:  :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسطو جان

<?php
/**
 * Created by PhpStorm.
 * User: shahab
 * Date: 8/25/2016
 * Time: 2:10 AM
 */

//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//مشخصات دیتابی درون هاست/////////////////////////////////////////////
$servername = "localhost";
$username = "tططططططط";
$password = "طططططط";
$dbname = "ططططط";
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
// داده های ارسال از طرف بیسیک 4 اندروید /////////////////////////
$date = $_POST['date'];
$time = $_POST['time'];
$appname = $_POST['appname'];
$package_name = $_POST['package_name'];
$app_ver = $_POST['app_ver'];
$store_seller = $_POST['store_seller'];
$phone_manufacturer = $_POST['phone_manufacturer'];
$phone_model = $_POST['phone_model'];
$phone_product = $_POST['phone_product'];
$phone_id = $_POST['phone_id'];
$phone_sdkversion = $_POST['phone_sdkversion'];
$version_android = $_POST['version_android'];
//♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
//برای تشخیص حروف فارسی در دیتابیس آنلاین این گزینه رو اضافه میکنیم
mysqli_set_charset($conn,"utf8");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";


//اینجا میایم کنترل میکنیم اگر دستگاه شماره سریالش تکراری بود
// مقدار تاریخ وساعت قدیمی که آخرین اتصالش بوده رو به بیسیک برگردون
// و بعد
// تاریخ و ساعت  جدید رو جایگزین کنترل
//در صورتی که شماره سریال تکراری نبود یعنی دستگاه جدید هست و بیا همه مشخصات رو در دیتابیس ثبت کن
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$sql = "SELECT * FROM app_information WHERE phone_id = '$phone_id'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

//    echo "این دستگاه از قبل نصب شده است";

    // اینجا باید مقادیر تاریخ قدیمی و زمان قدیمی رو برگردونیم به بیسیک 4 اندروید
    // که محاسبه کنیم
    // و به کار بر بگیم به برنامه خوش اومدی و آخرین بازدید شما مثلا 5 روز پیش بوده است
    //
    $myResult = $conn->query("SELECT * FROM app_information WHERE phone_id = '$phone_id' ORDER BY id DESC LIMIT 1")->fetch_assoc();
    echo $myResult["date"]. "#" .$myResult["time"]; 

} else {

    $sql = "INSERT INTO app_information (date,time,appname,package_name,app_ver,store_seller,phone_manufacturer,phone_model,phone_product,phone_id,phone_sdkversion,version_android)
	VALUES ('$date','$time','$appname','$package_name','$app_ver','$store_seller','$phone_manufacturer','$phone_model','$phone_Product','$phone_id','$phone_sdkversion','$version_android')";

    if ($conn->query($sql) === TRUE) {
        echo "دستگاه جدید به دیتابیس افزوده شد";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}
$conn->close();
?>
    $myResult = $conn->query("SELECT * FROM app_information WHERE phone_id = '$phone_id' ORDER BY id DESC LIMIT 1")->fetch_assoc();
    echo $myResult["date"]. "#" .$myResult["time"];

این دو خط میاد و اخرین ردیف ثبت شده بر اساس ای دی رو برای یه شماره سریال خاص ، میگیره و میتونی اطلاعاتش رو بگیری

بررسی کن ، موردی بود بگو

لینک ارسال
به اشتراک گذاری در سایت های دیگر

    $myResult = $conn->query("SELECT * FROM app_information WHERE phone_id = '$phone_id' ORDER BY id DESC LIMIT 1")->fetch_assoc();
    echo $myResult["date"]. "#" .$myResult["time"];

این دو خط میاد و اخرین ردیف ثبت شده بر اساس ای دی رو برای یه شماره سریال خاص ، میگیره و میتونی اطلاعاتش رو بگیری

بررسی کن ، موردی بود بگو

 

 

استاد اسکندری عزیز کد هایی که راهنمایی فرمودید به پروژه اضافه شد 
در هاست هیج خطایی در یافت نمیکنم و همه چیز مرتب هست اما مقادیر به برنامه بر نمیگرده و یک خطا در بیسیک در قسمت  log به ما نشون میده که مربوط به  "نخ ها و یا رشته ها میشه "

ساب های بیسیک رو ضمیمه میکنم بررسی بفرمایید و منتظر راهنمایی شما هستم
با تشکر
 

Sub aria_DoInBackground(Params() As Object) As Object
		Log("11111111111111 aria_DoInBackground  1♥♥♥♥")
	
	Try
		Log("22222222222  Try ♥♥♥")
		
		Dim result As String = dlr.Get(Params(0)).POST(Params(1)).String
		Dim str() As String = Regex.Split("#",result)
		
		Msgbox(result,"")
		
			mydate=str(0 )
			mytime=str(1)
			myappname=str(2)
			mypackage_name=str(3)
			myapp_ver=str(4)
			mystore_seller=str(5)
			myphone_manufacturer=str(6)
			myphone_model=str(7 )
			myphone_product=str(8)
			myphone_id=str(9)
			myphone_sdkversion=str(10)
			myversion_android=str(11)
			
		Return "done"
	Catch
		Log("3333333333  Catch  ♥♥♥")
		Log(LastException)
		Return "error"
	End Try
	
End Sub







Sub aria_OnPostExecute(Result As Object)
	Log("44444444  aria_OnPostExecute  ♥♥♥")
	Log(Result)
End Sub










Sub Button1_Click

'//////////////////////////////////////////////////////////////////////////////////////////
aria.Initialize("aria")
dlr.Initialize(aria)

	If dlr.IsConnected Then
	aria.Run(Array As String("http://xxxxxxxx/xxxxxxx/information8.php","date="&date&"&time="&time&"&appname="&appname&"&package_name="&package_name&"&app_ver="&app_ver&"&store_seller="&store_seller&"&phone_manufacturer="&phone_manufacturer&"&phone_model="&phone_model&"&phone_product="&phone_product&"&phone_id="&phone_id&"&phone_sdkversion="&phone_sdkversion&"&version_android="&version_android))	
	Else
	ToastMessageShow("disconnected",False)
End If
'//////////////////////////////////////////////////////////////////////////////////////////////

End Sub															   

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

AriaAsynkTask Error : null      
11111111111111 aria_DoInBackground  1♥♥♥
22222222222  Try ♥♥♥
3333333333  Catch  ♥♥♥
(RuntimeException) java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
44444444  aria_OnPostExecute  ♥♥♥
error

خط اول هم که نوشته AriaAsynkTask Error : null  خطای قرمز رنگ هست 
با تشکر 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خوب به جا های خوب برنامه نزدیک میشیم
///////////////////
هدفمون اینه که بیایم و به کاربر یه همچین مسیج باکسی رو نمایش بدیم 

%D8%B5%D8%B5%D8%B5%D8%B5.png

 

 

خوب برای این کار دیتابیس یه ستون کم داشت که تعداد اتصال دستگاه به اینترنت و باز شدن دستگاه رو بهش بدیم تا برامون برگردونه
و هر بار هم که به اینترنت متصل میشه یکی بهش اضافه کنه 

 

برای این کار (( براساس فرض اینکه کار با دیتابیس و هاست آنلاین  رو بلد هستید )) 
باید یک ستون به دیتابیس اضافه کنید و مقدار int یا عددی بهش بدید 

اسم ستون جدید رو use_counters قرار میدیم 
یعنی دیتابیس آنلاین شما به صورت زیر خواهد شد با 14 ستون 

 

http://up.vbiran.ir/uploads/41121147213584113359_دیتابیس4.png

لینک ارسال
به اشتراک گذاری در سایت های دیگر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...