PDA

View Full Version : سوال: بدست آوردن تعداد بازدید از یک خبر



reza4359
پنج شنبه 08 دی 1390, 20:31 عصر
چطوری میشه تعداد بازدید از یک خبر رو بدست آورد؟
ممنون

fakhravari
پنج شنبه 08 دی 1390, 22:36 عصر
با سلام
تحلیل زیاد سخت نیست.
در پیج لود باید چک کنید حالا ip یا هی چیز دیگه اگر تکراری نبود 1 واحد اضافه شود .

reza4359
جمعه 09 دی 1390, 09:19 صبح
با سلام
تحلیل زیاد سخت نیست.
در پیج لود باید چک کنید حالا ip یا هی چیز دیگه اگر تکراری نبود 1 واحد اضافه شود .
سلام میشه با کد توضیح بدید که باید چه کار کرد
ممنون

fakhravari
جمعه 09 دی 1390, 11:08 صبح
public void AddPolls(int q, int o,string user)
{
try
{
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand("INSERT INTO [Polls_Votes] ([QuestionID], [OptionID],[UserName]) VALUES (@QuestionID, @OptionID,@UserName)", con);
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
con.Open();

cmd.Parameters.Add("QuestionID", SqlDbType.Int).Value = q;
cmd.Parameters.Add("OptionID", SqlDbType.Int).Value = o;
cmd.Parameters.Add("UserName", SqlDbType.NVarChar).Value = user;


cmd.ExecuteNonQuery();
con.Close();

lasteror = "رای شما ثبت شد";
}
catch
{
lasteror = "Eroor Post";
}
}




public DataTable ChekUser(string UserName)
{
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = con;
cmd1.CommandText = "select * from Polls_Votes where UserName=@UserName";
cmd1.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = UserName;
con.Open();

SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();

da.Fill(dt);
con.Close();

if (dt.Rows.Count > 0)
{
vaziat = false;
lasteror = "شما در نظر سنجی شرکت کرده اید";
}
else
{
// lasteror = "شما در نظر سنجی شرکت کرده اید";
vaziat = true;
}
return dt;
}
Pollss p = new Pollss();

string chk = Environment.UserName + "|" + Environment.UserDomainName + "|" + HttpContext.Current.Request.UserHostAddress + "|" + QID.ToString();

p.ChekUser(chk);

if (p.vaziat == true)
{

if (Request.QueryString["QuestionID"].ToString() != "")
{
p.AddPolls(Int32.Parse(Request.QueryString["QuestionID"].ToString()), Int32.Parse(AnswerId), chk);
Label_Message.Text = p.lasteror;
Response.Redirect("PollsResult.aspx?QuestionID=" + Request.QueryString["QuestionID"].ToString());
}
else
{
Label_Message.Text = "q not";
}
}
else
{
Label_Message.Text = p.lasteror;
}

reza4359
جمعه 09 دی 1390, 12:05 عصر
ممنونم ولی من تعداد بازدید رو خواستم این که سیستم نظر سنجیه!!

fakhravari
جمعه 09 دی 1390, 16:10 عصر
خوب منم گفتم که میشه شبیه سازی کرد.
شما بر حسب id خبر و ip کاربر یک رکورد اضافه بشه به جدول و بعد باید count بگیرید

reza4359
جمعه 09 دی 1390, 21:27 عصر
ممنونم از راهنماییتون ولی من یک اسلایدر دارم که باکلیک بر روی لینک عکس اون به صفحه دیگه میره و اونجا متن خبر و عکس و تاریخ انتشار خبر رو نمایش میده من این کارا رو انجام دادم و با query string این کارو کردم حالا میخوام تعداد بازید رو هم بذارم یعنی هر بار که روی لینک اسلایدر کلیک میشه در صفحه شرح خبر میخوام تعدا بازدید رو هم ننشون بدم و اونو داخل یک لیبل نمایش بدم
ممنون میشم بگیدچهطوری باید اینکارو انجام داد

fakhravari
جمعه 09 دی 1390, 21:40 عصر
در نهایت شما باید id خبر را داشته باشید
در نهایت برای تعداد بازدید باید به این شکل باشد
INSERT INTO RatingPost ( PostID , UserName ) VALUES ( @PostID , @ UserName )
برای مثال کد زیر رو ببنید.
SELECT isnull(convert(nvarchar(50),Sum(Rating)),'0')AS SumOfRating , isnull(convert(nvarchar(50),Count(PostID)),'0')AS CountOfPostID
FROM RatingPost where PostID=@PostID


SqlConnection con = new SqlConnection(ConnectionString);
con.Open();
SqlCommand cmd1 = new SqlCommand("AmarRating", con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add("@PostId", SqlDbType.Int).Value = this.PostId;
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();

da.Fill(dt);
if (dt.Rows.Count > 0)
{
this.count = Int32.Parse(dt.Rows[0]["CountOfPostID"].ToString());
this.Rate = Int32.Parse(dt.Rows[0]["SumOfRating"].ToString());
}
return dt;

reza4359
جمعه 09 دی 1390, 22:11 عصر
ممنون از لطفتون میشه این دو خط رو توضیح بدید

this.count = Int32.Parse(dt.Rows[0]["CountOfPostID"].ToString()); this.Rate = Int32.Parse(dt.Rows[0]["SumOfRating"].ToString());

این دو تا فیلد مربوط به چی میشه؟

reza4359
جمعه 09 دی 1390, 22:29 عصر
چطوری یک واحد به مقدار یک فیلد اضافه کنم
Label6.Text = dr["counter"].ToString();
میخوام داخل رویداد page_load هر بار یک واحد به فیلد counter اضافه کنم

fakhravari
جمعه 09 دی 1390, 23:25 عصر
خوب اینطوری زیاد جالب نیستا.یک واحد به مقدار یک فیلد اضافه کنم. چون حد اقل با Ip کنترل میشه.
اون 2 تا برای 0 نشاندادن مقدار برگردوندن مقدار count.
dr["counter"].ToString()+1
Int32.pars

lord_viper
دوشنبه 01 اسفند 1390, 17:41 عصر
خب هر صفحه چیزی داره به اسم UrlReffer که صفحه قبلی رو تو خودش نگه میداره اگه مقدارش Null باشه یعنی کاربر مستقیما ادرس رو تو ادرسبار تایپ کرده و اون خبر رو باز کرده اگه مقدارش با مقدار Url برابر نباشه یعنی از یک لینک داخلی اومده به اون صفحه و اگه مقدارش با مقدار Url برابر باشه یعنی یه پست بک تو اون صفحه انجام شده با استفاده از اون میتونین مقدار بازدید صفحات رو با دقت بیشتری انجام بدین
واسه هر جدول خبرتون 1 فیلد کانتر در نظر بگیرین


protected void Page_Load(object sender, EventArgs e)
{
if (Request.UrlReferrer == null)
{
//counter+=1
}
else
{
if (Request.UrlReferrer.ToString() != Request.Url.ToString())
{
//counter+=1;
}
}
}

amirkhoyli
پنج شنبه 02 شهریور 1391, 17:15 عصر
با سلام دوستان من هم این مشکل داشتم اما امروز درستش کردم
اول id خبر رو میگیرید بت query
بعدش update mikonid



Label1.Text= Request.QueryString["newsid"].ToString();
commandexe("update tblnews set count=count+1 where newsid=" + Label1.Text);

Hamid2547
سه شنبه 26 دی 1391, 06:42 صبح
خب هر صفحه چیزی داره به اسم UrlReffer که صفحه قبلی رو تو خودش نگه میداره اگه مقدارش Null باشه یعنی کاربر مستقیما ادرس رو تو ادرسبار تایپ کرده و اون خبر رو باز کرده اگه مقدارش با مقدار Url برابر نباشه یعنی از یک لینک داخلی اومده به اون صفحه و اگه مقدارش با مقدار Url برابر باشه یعنی یه پست بک تو اون صفحه انجام شده با استفاده از اون میتونین مقدار بازدید صفحات رو با دقت بیشتری انجام بدین
واسه هر جدول خبرتون 1 فیلد کانتر در نظر بگیرین


if (Request.UrlReferrer == null)
if (Request.UrlReferrer.ToString() != Request.Url.ToString())

من از این شرط استفاده کردم ولی کار نکرد، باز هم به تعداد بازدید ها با هر رفرش صفحه اضافه شد، غیر از این !Page.IsPostBack رو هم امتحان کردم ولی باز هم فایده نداشت، کسی شرط دیگری سراغ داره؟نمیدونم شاید چون عنوان فارسی صفحه رو هم با کوئری استرینگ میفرستم مشکلی ایجاد شده آیا ربطی میتونه به این موضوع داشته باشه؟

h05531n
شنبه 18 خرداد 1392, 17:08 عصر
سلام

من هم می خوام تعداد بازدید از یک خبر رو بدست آورد ،اما با این روش ها نتونستم!

توضیح : وقتی در صفحه اصلی روی ادامه مطلب کلیک میکنم ، مشروح خبر در یک صفحه دیگه نشون داده میشه
من می خوام تعداد بازدید اون صفحه رو در بانک ذخیره کنم ، اگر صفحه هم Refresh بشه می خوام مقدار بازدید افزایش پیدا کنه.
ممنون میشم ، یکی از دوستان راهنمایی کنه.

fakhravari
یک شنبه 19 خرداد 1392, 14:18 عصر
خیلی واضح است.
هر رفرش + 1 مقدار رکورد بر اساس ایدی خبر

h05531n
یک شنبه 19 خرداد 1392, 15:14 عصر
سلام

برای شما واضح است:لبخند: ، من هر کاری کردم نتونستم!:ناراحت:
اگر میشه نمونه اش رو بزارید.

من اینجوری نوشتم:
("Update Tbl_News Set NRank=NRank+1 where (NewsId = @NewsId)");

قبل از Update چه کدی باید بنویسی؟

pedram_ns
یک شنبه 19 خرداد 1392, 17:23 عصر
کل قضیه که سادس.
شما توی جدولی که اخبار رو دارید یک فیلد به اسم مثلا viewer اضافه میکنید و با هر بار نمایش یک خبر بر اساس id بدست اومده توی رویداد لود صفحتون مقدار ستون viewer رو میخونید، با عدد یک جمع میکنید و دوباره این ستون رو با عدد جدید update می کنید.

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

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

کار بهتر اینه که به جای اینکه افزایش تعداد بیننده رو در رویداد لود صفحه نمایش خبر انجام بدی، این کار رو با کلیک روی لینک انجام بدی. یعنی هر وقت روی لینک خبر کلیک شد کدهای اضافه کردن یک بازدید کننده جدید کار کنن نه در صفحه بعد.

در کل به نظر من دستش نزنید.

h05531n
دوشنبه 20 خرداد 1392, 11:38 صبح
این کدی که برای ادامه مطلب نوشتم:


<asp:HyperLink ID="HyperLink1" runat="server" ForeColor="Blue"
NavigateUrl='<%# Eval("NewsId", "Page_News.aspx?NewsID={0}") %>'
style="font-weight: 700">ادامه مطلب</asp:HyperLink>

این هم کد صفحه مشروح اخبار :


<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Tbl_News] WHERE ([NewsId] = @NewsId)">
<SelectParameters>
<asp:QueryStringParameter Name="NewsId" QueryStringField="NewsId"
Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>

حالا در Page_Load صفحه مشروح اخبار چطور باید به بانک وصل بشم؟

بعنی قبل از Update چه کدی باید بنویسم ؟

"Update Tbl_News Set NRank=NRank+1 where (NewsId = @NewsId)"

fakhravari
سه شنبه 21 خرداد 1392, 23:25 عصر
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{

}
}


SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "UPDATE Inbox set Vaziat =@Vaziat Where ID = @ID";
con.Open();

cmd.Parameters.Add("@Vaziat", SqlDbType.Bit).Value = Vaziat;
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;

cmd.ExecuteNonQuery();
con.Close();

عزیز دل برادر خیلی اسونه کاری که میخواهی کنی .
کمی روش فکر کن

messi13
جمعه 17 بهمن 1393, 21:42 عصر
ضمن سلام
اساتید توضیح کامل تر میدن؟(با کد)
ضمنا با کوکی بهتره یا ثبت ip ؟
ممنون میشم با یه مثال تست شده توضیح بدید.