PDA

View Full Version : آمار ساده روزانه و ماه برای سایت



sara_aryanfar
شنبه 22 بهمن 1390, 22:42 عصر
با سلام دوستان من در مورد آمار تو سایت سرچ کردم بحث های مختلف و خوبی شده بود ولی نتونستم از اونا استفاده کنم من دنبال این هستم که آمار بازدید امروز -دیروز -ماه رو نشون بدم در سایت دوستان گفته بودن از فایل گلوبال استفاده بشه و تعدادی روش دیگه اگر ممکنه دوستانی که آمار گذاشتن راهنمایی کنندر ضمن اگر ممکنه من می خوام این آمار رو در بخش مدیریت هم نشون بدم با چارت و لینک ورودی

hjran abdpor
شنبه 22 بهمن 1390, 23:23 عصر
سلام.
اقای سامان هاشمی تو همین فروم یه کامپوننت طراحی کردن برای اینکار و خیلی هم عالی است ، از اون استفاده کنید . یه سرچ بزنید پیدا کنید حوصله سرچ را ندارم .
بیس کار بدین صورت است :

void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown

}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs

}
void Session_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
SqlCommand cm = new SqlCommand();
SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigur ationManager.ConnectionStrings["Connectionstring"].ConnectionString);
cm.Connection = cn;
cm.CommandText = "update pageview set pv = pv + 1 where date = 'total' update pageview set pv = pv + 1 where date = '" + DateTime.Now.Day + "' update pageview set pv = pv + 1 where date = 'thismonth'";
cm.CommandType = CommandType.Text;
cm.Connection.Open();
cm.ExecuteNonQuery();
cm.Connection.Close();
cm.Dispose();

if (DateTime.Today.Day == 1)
{
cn.Open();
SqlCommand cmdCount = new SqlCommand("SELECT pv FROM pageview where date = 'runonce'", cn);
int no = (int)cmdCount.ExecuteScalar();
cn.Close();
if (no == 1)
{
SqlCommand cm2 = new SqlCommand();
cm2.Connection = cn;
cm2.CommandText = "update pageview set pv = (select pv from pageview where date = 'thismonth') where date = 'lastmonth' update pageview set pv = '0' where date = 'thismonth' declare @i int set @i = 1 while @i<32 begin update pageview set pv = 0 where date = convert(varchar(50),@i) set @i = @i + 1 end update pageview set pv = '0' where date = 'runonce'";
cm2.CommandType = CommandType.Text;
cm2.Connection.Open();
cm2.ExecuteNonQuery();
cm2.Connection.Close();
cm2.Dispose();
}
}
if (DateTime.Today.Day == 2)
{
SqlCommand cm3 = new SqlCommand();
cm3.Connection = cn;
cm3.CommandText = "update pageview set pv = '1' where date = 'runonce'";
cm3.CommandType = CommandType.Text;
cm3.Connection.Open();
cm3.ExecuteNonQuery();
cm3.Connection.Close();
cm3.Dispose();
}
}

void Session_End(object sender, EventArgs e)
{
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
}

یه جدول توی دیتابیس نیاز هست به نام pageview با یه فیلد pv و date
date این مقادیر رو داره(این رکورد ها)
total,lastmonth,thismonth,1,2,3,....,31,runonce

موفق باشید.

sara_aryanfar
یک شنبه 23 بهمن 1390, 00:17 صبح
ممنون در صورت امکان لینک اون افزونه رو هم پیدا کنید ممنون میشم یه سوال مبتدی هم داشتم میشه این شرط رو برام توضیح بدین if (DateTime.Today.Day == 1) چرا مساوی یک

hjran abdpor
یک شنبه 23 بهمن 1390, 00:52 صبح
این هم همون لینک .

پیوست : کد مال من نیست.

sara_aryanfar
یک شنبه 23 بهمن 1390, 01:12 صبح
فکر نمی کنم بشه با این آمار گزارش دهی کرد و برای آماری که بشه گزارشگیری کرد ازش استفاده از دیتابیس الزامی هست درسته؟

hjran abdpor
یک شنبه 23 بهمن 1390, 01:34 صبح
من خودم از این استفاده کردم و خوب هم جواب میده !!! بهتره بگیم از یک فایل XML استفاده میکنه !!! چرا اتفاقا هم میشه برای گزارش گیری امار استفاده کرد....

بستگی به خود وب سایت هم داره و میتونید از DB هم برای ارشیو امار استفاده کنید ..

sara_aryanfar
یک شنبه 23 بهمن 1390, 01:58 صبح
فکر کنم اول باید در دیتا بیس ذخیره بکنیم بعد ازش گزارشات رو تولید کنیم فقط یه مطلبی چطوری داخل کد به متغییر های فایل xml دسترسی داشته باشیم تا بتونیم اونا رو داخل دیتا بیس بریزیم

hjran abdpor
یک شنبه 23 بهمن 1390, 02:05 صبح
فکر کنم اول باید در دیتا بیس ذخیره بکنیم بعد ازش گزارشات رو تولید کنیم فقط یه مطلبی چطوری داخل کد به متغییر های فایل xml دسترسی داشته باشیم تا بتونیم اونا رو داخل دیتا بیس بریزیم
دوست عزی شما کاری به متغیرهای XML نداشته باشید باید از این کد استفاده کنید :

Statistic st = new Statistic();
string ch = st.Online.ToString();
//Code Here For InserTDatabase


من اینجا فقط یک فیلد دارم واون هم افراد انلاین است که اون را دداخل یک متغییر ریختم وبعد ذخیره میکنم تو DB.
شما هم هر کدوم را خواستید تو DB ذخیره کیند !!!

sara_aryanfar
یک شنبه 23 بهمن 1390, 02:13 صبح
یعنی با ورود هر کاربر یک بار به دیتا بیس رجوع بشه فکر نکنم این عملی باشه ولی فکر کنم بشه داخل همون کلاس این کار رو کرد یعنی زمانی که روز عوض میشه یه بار دیتا بیس رو به روز کنم ؟
راستی آی پی کاربر رو چطوره میشه به دست آورد؟

hjran abdpor
یک شنبه 23 بهمن 1390, 02:26 صبح
من بیس کار را گفتم شما هر جور صلاح میدونید عمل کنید ، من از تلفیقی از جی کوئری برای ذخیره امار استفاده می کردم !!! هم ایده ی که خودتون دارید خوب است .
این هم کد :

string UserIPAddress = Request.ServerVariables["REMOTE_ADDR"].ToString();

یا

IPHostEntry hostname = Dns.GetHostByName("hostname");
IPAddress[] ip = hostname.AddressList;
string str = ip[0].ToString();

فرقی دومی اینه که براساس FQDN کار میکنه .
این یکی از روش ها است ، روش های زیادی وجود دارد.
موفق باشید

pershengkurd
سه شنبه 25 بهمن 1390, 18:46 عصر
با سلام
این dll با دات نت 4 مشکلی نداره؟
من ازش استفاده کردم ولی نمی زاره سایت بالا بیاد، به نظرتون مشکلش با globale?

sara_aryanfar
سه شنبه 25 بهمن 1390, 21:11 عصر
من استفاده کردم شکلی نداشت تنها ایرادش اینه با رفرش صفحه آمار میره بالا

Saman Hashemi
چهارشنبه 26 بهمن 1390, 16:40 عصر
من استفاده کردم شکلی نداشت تنها ایرادش اینه با رفرش صفحه آمار میره بالا
به پست زیر مراجعه کنید DLL آپدیت کردم و مشکل رفرش برطرف شد...!
آدرس پست (آدرس پست)

mohsen.nsb44
جمعه 19 اسفند 1390, 18:22 عصر
این هم همون لینک .

پیوست : کد مال من نیست.
سلام من از این برنامه در لوکال استفاده کردم مشکلی نداشتم اما زمانی که سایت رو اپلود کردم کد زیر رو مشکل میگیره
var view = from v in xdoc.Elements("dataroot")
مشکلشم dataroot هستش
میشه بگین ایراد از چیه ؟

Rohollaes
جمعه 19 اسفند 1390, 23:20 عصر
اگه روی هاست دارین استفاده میکنین باید به پوشه فایل xml‌اجازه دسترسی بدین
برای اعمال تغییرات اضافی در فایل xml هم میتونید از linq استفاده کنید

bahareh1368
شنبه 20 اسفند 1390, 07:52 صبح
سلام.
اقای سامان هاشمی تو همین فروم یه کامپوننت طراحی کردن برای اینکار و خیلی هم عالی است ، از اون استفاده کنید . یه سرچ بزنید پیدا کنید حوصله سرچ را ندارم .
بیس کار بدین صورت است :

void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown

}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs

}
void Session_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
SqlCommand cm = new SqlCommand();
SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigur ationManager.ConnectionStrings["Connectionstring"].ConnectionString);
cm.Connection = cn;
cm.CommandText = "update pageview set pv = pv + 1 where date = 'total' update pageview set pv = pv + 1 where date = '" + DateTime.Now.Day + "' update pageview set pv = pv + 1 where date = 'thismonth'";
cm.CommandType = CommandType.Text;
cm.Connection.Open();
cm.ExecuteNonQuery();
cm.Connection.Close();
cm.Dispose();

if (DateTime.Today.Day == 1)
{
cn.Open();
SqlCommand cmdCount = new SqlCommand("SELECT pv FROM pageview where date = 'runonce'", cn);
int no = (int)cmdCount.ExecuteScalar();
cn.Close();
if (no == 1)
{
SqlCommand cm2 = new SqlCommand();
cm2.Connection = cn;
cm2.CommandText = "update pageview set pv = (select pv from pageview where date = 'thismonth') where date = 'lastmonth' update pageview set pv = '0' where date = 'thismonth' declare @i int set @i = 1 while @i<32 begin update pageview set pv = 0 where date = convert(varchar(50),@i) set @i = @i + 1 end update pageview set pv = '0' where date = 'runonce'";
cm2.CommandType = CommandType.Text;
cm2.Connection.Open();
cm2.ExecuteNonQuery();
cm2.Connection.Close();
cm2.Dispose();
}
}
if (DateTime.Today.Day == 2)
{
SqlCommand cm3 = new SqlCommand();
cm3.Connection = cn;
cm3.CommandText = "update pageview set pv = '1' where date = 'runonce'";
cm3.CommandType = CommandType.Text;
cm3.Connection.Open();
cm3.ExecuteNonQuery();
cm3.Connection.Close();
cm3.Dispose();
}
}

void Session_End(object sender, EventArgs e)
{
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
}

یه جدول توی دیتابیس نیاز هست به نام pageview با یه فیلد pv و date
date این مقادیر رو داره(این رکورد ها)
total,lastmonth,thismonth,1,2,3,....,31,runonce

موفق باشید.

مشکل این کد اینه که بعد از هربار ریست شدن application کل آمار سایت صفر میشه.اینطور نیست یا من دارم اشتباه می کنم؟

Saman Hashemi
شنبه 20 اسفند 1390, 08:53 صبح
وقتی تعداد بازدیدها رو میریزید توی بانک ،حالا برنامه ریست شه مگه تاثیری روی اطلاعات بانک میذاره...!

mohsen.nsb44
شنبه 20 اسفند 1390, 11:05 صبح
اگه روی هاست دارین استفاده میکنین باید به پوشه فایل xml‌اجازه دسترسی بدین
برای اعمال تغییرات اضافی در فایل xml هم میتونید از linq استفاده کنید
من برنامه ای که نوشته بودم با نسخه 2005 بود که از لینک نمیشه استفاده کرد
اجازه دسترسی که میدم
اما میخوام بدونم dataroot چیه؟ برای چی مورد استفاده میگیره

m.toosi
یک شنبه 13 فروردین 1391, 01:19 صبح
با سلام و احترام
دوستان من از این کد استفاده کردم و حتی از فایل DLL ولی هردو خطا میده
حالمو گرفته
شک دارم یک قسمتی رو
وقتی هم فایل ساشارپ و هم DLL رو اضافه میکنم که خطا میده و میگه بقیه سورس ها با زبان VB درست شده و چون این سیشارپ هست نمیشه و ...

The files '/ASP-SQL/App_Code/Statistic.cs' and '/ASP-SQL/App_Code/db.vb' use a different language, which is not allowed since they need to be compiled together.

و وقتی که سیشارب رو پاک میکنم تا فقط از DLL استفاده کنم میگه:

Input string was not in a correct format.

و از این خط خطا میگیره:

Dim str As String = ":تعداد افراد آنلاين " + st.Online + "" + ":تعداد بازديد امروز " + st.Today + "" + ":تعداد بازديد ديروز " + st.Yesterday +....

اومدم فایل سیشارپ رو تبدیل کنم به VB ار این 2تا خط خطا میگیره:

Dim view = from v in xdoc.Elements("dataroot") select New{ today = v.Element("today"), yesterday = v.Element("yesterday"), lastmonth = v.Element("lastmonth"), month = v.Element("month"),date = v.Element("date"),dateMonth=v.Element("dateMonth"),total = v.Element("total") }
For Each item As var In View
اگر راهنمایی کنید ممنون میشم

sara_aryanfar
یک شنبه 13 فروردین 1391, 01:56 صبح
ساختار فایل گلوبال اینطوریه
<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Application.Add("Online", 0);
}

void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown

}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs

}

void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Application.Lock();
Application["Online"] = (int)Application["Online"] + 1;
Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
Application.Lock();
Application["Online"] = (int)Application["Online"] - 1;
Application.UnLock();
}

</script>
فایل زیر رو هم دانلود می کنی و عین پوشه رو داخل پروژه میزاری پوشه باید شامل یک کلاس و یک فایل xml باشه

دانلود85014

خوب حالا یک شی از این کلاس داخل هر جا که می خوای آمار رو نشون بدی تعریف می کنی من مثلا در پیچ لود وب مستر خودم به صورت زیر عمل کردم

Statistic sd = new Statistic();
Labearartody.Text = sd.Today.ToString();
Labeamarlastmon.Text = sd.LastMonth.ToString();
Labeamaronline.Text = sd.Online.ToString();
labeamarlastday.Text = sd.Yesterday.ToString();
labeamarkol.Text = sd.Month.ToString();

m.toosi
یک شنبه 13 فروردین 1391, 03:28 صبح
مرسی ممنون لطف کردی سارا خانم
در لوکال درست کار میکنه
ولی در سرور خطا میگیره از خط
Statistic sd = new Statistic();
چکار کنم؟

sara_aryanfar
یک شنبه 13 فروردین 1391, 05:44 صبح
چه خطایی میده؟ برا من که درست کار کرد using Statistics;

m.toosi
سه شنبه 15 فروردین 1391, 23:36 عصر
ببخشید هنوز خطاش برطرف نشده
اخطا از این قسمت میگیره

Dim sd As New Statistic()

توجه کنید من کل برنامه سایتم رو با VB نوشتم
واین فایل statics سیشارپ هست
من فکر میکنم با این قضیه مشکل داره
ولی در حال طبیعی نباید با این قضیه مشکل داشته باشه
به نظر شما بنده چکار کنم؟

m.toosi
چهارشنبه 16 فروردین 1391, 00:31 صبح
خطاش دقیقا این هست : Compilation Error
من از Imports Statistics استفاده کردم

bitcob589
چهارشنبه 30 فروردین 1391, 22:10 عصر
سلام.
اقای سامان هاشمی تو همین فروم یه کامپوننت طراحی کردن برای اینکار و خیلی هم عالی است ، از اون استفاده کنید . یه سرچ بزنید پیدا کنید حوصله سرچ را ندارم .
بیس کار بدین صورت است :

void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown

}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs

}
void Session_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
SqlCommand cm = new SqlCommand();
SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigur ationManager.ConnectionStrings["Connectionstring"].ConnectionString);
cm.Connection = cn;
cm.CommandText = "update pageview set pv = pv + 1 where date = 'total' update pageview set pv = pv + 1 where date = '" + DateTime.Now.Day + "' update pageview set pv = pv + 1 where date = 'thismonth'";
cm.CommandType = CommandType.Text;
cm.Connection.Open();
cm.ExecuteNonQuery();
cm.Connection.Close();
cm.Dispose();

if (DateTime.Today.Day == 1)
{
cn.Open();
SqlCommand cmdCount = new SqlCommand("SELECT pv FROM pageview where date = 'runonce'", cn);
int no = (int)cmdCount.ExecuteScalar();
cn.Close();
if (no == 1)
{
SqlCommand cm2 = new SqlCommand();
cm2.Connection = cn;
cm2.CommandText = "update pageview set pv = (select pv from pageview where date = 'thismonth') where date = 'lastmonth' update pageview set pv = '0' where date = 'thismonth' declare @i int set @i = 1 while @i<32 begin update pageview set pv = 0 where date = convert(varchar(50),@i) set @i = @i + 1 end update pageview set pv = '0' where date = 'runonce'";
cm2.CommandType = CommandType.Text;
cm2.Connection.Open();
cm2.ExecuteNonQuery();
cm2.Connection.Close();
cm2.Dispose();
}
}
if (DateTime.Today.Day == 2)
{
SqlCommand cm3 = new SqlCommand();
cm3.Connection = cn;
cm3.CommandText = "update pageview set pv = '1' where date = 'runonce'";
cm3.CommandType = CommandType.Text;
cm3.Connection.Open();
cm3.ExecuteNonQuery();
cm3.Connection.Close();
cm3.Dispose();
}
}

void Session_End(object sender, EventArgs e)
{
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
}

یه جدول توی دیتابیس نیاز هست به نام pageview با یه فیلد pv و date
date این مقادیر رو داره(این رکورد ها)
total,lastmonth,thismonth,1,2,3,....,31,runonce

موفق باشید.

مفهوم کد زیر چیست

if (DateTime.Today.Day == 2)