PDA

View Full Version : مشکل با ساختن لایک در asp.net



tarsim
سه شنبه 22 اسفند 1391, 13:36 عصر
باسلام من باید قسمتی برای پست هام درست کنم که کار بر بتونه لایک کنه و تعداد لایک ها نشون داده بشه و از همه مهمتر کار برای مهمان هم بتونن لایک کنن برای همین میدونم باید آی پی کار بر رو توی بانک ذخیره کنم . من یک گرید ویو دارم و مستقیم از بانک مطالب رو میخونه و نشون میده(پست) میدونم باید یک جدول باشه که فقط ای پی کار بر و ای دی پستم رو توش ذخیره کنم تا از دوباره لایک کردن کاربری که لایک کرده اون پست رو جلو گیری کنم و لی نمیدونم چطوری کد بنویسیم که این کارا برام انجام شه . الگوریتم کار رو میدونم . اول باید بریم توی جدولی که ای دی پست و ای پی کار بر رو نگه میداره ببینیم وجود داره این آی دی و آی پی اگر نبود دکمه لایک فعال شه و لایک زده شه و در جدول آپی پی و آدی کار بر ثبت شه . ویکی به تعداد لایک خورده اضافه شه. دوستان عزیز کسی میتونه کدش رو بزاره تا مشکلم حل شه ؟ جدول هاش دقیق چی میخواد ؟مرسی منتظر جواب اساتید میمونم

اوبالیت به بو
سه شنبه 22 اسفند 1391, 14:05 عصر
درود بر شما

جدول Likes رو با فیلد های IP و کد مطلب رو بسازید.
یک SP خواهید داشت برای نمایش Like های گذشته اون مطلب با این شرط:


WHERE [Post_ID] = @Post_ID
AND
[IP] = @IP

در صفحه وب مورد نظر قاعدتا با QueryString آی دی مطلب مورد نظر رو می خونید و محتوا یا جزییات اون مطلب رو بدست میارید، همین QueryString رو پاس بدید به متغیر @Post_ID و آی پی کاربر رو پاس بدید به @IP.

بعد این SP رو در یک DataSet فراخوانی کنید. اگر رکوردی برگشت داده شد دکمه Like غیرفعال یا Visible = False خواهد شد، اگر خیر Visible = True خواهد شد.

این دکمه وقتی روش کلیک شد باید SP مربوط به عمل Insert فراخوانی و اجرا بشه که دوباره از طریق QueryString کد مطلب رو به متغیر @Post_ID و آی پی کاربر رو به متغیر @IP در اون SP ارسال می کنید. وقتی که عمل Insert رو انجام دادید باید یک SP دیگه رو فراخوانی کنید که عمل Count رو بر اساس @Post_ID انجام می ده که باز مثل قبل از طریق QueryString به متغیر @Post_ID این مقدار رو ارسال می کنید:



Select Count([Post_ID]) FROM Likes WHERE [Post_ID] = @Post_ID


وقتی این تابع اجرا شد، مقدار عددی برای شما برگشت داده خواهد شد که می تونید به کاربر نشون بدید.

tarsim
سه شنبه 22 اسفند 1391, 14:54 عصر
درود بر شما

جدول Likes رو با فیلد های IP و کد مطلب رو بسازید.
یک SP خواهید داشت برای نمایش Like های گذشته اون مطلب با این شرط:


WHERE [Post_ID] = @Post_ID
AND
[IP] = @IP

در صفحه وب مورد نظر قاعدتا با QueryString آی دی مطلب مورد نظر رو می خونید و محتوا یا جزییات اون مطلب رو بدست میارید، همین QueryString رو پاس بدید به متغیر @Post_ID و آی پی کاربر رو پاس بدید به @IP.

بعد این SP رو در یک DataSet فراخوانی کنید. اگر رکوردی برگشت داده شد دکمه Like غیرفعال یا Visible = False خواهد شد، اگر خیر Visible = True خواهد شد.

این دکمه وقتی روش کلیک شد باید SP مربوط به عمل Insert فراخوانی و اجرا بشه که دوباره از طریق QueryString کد مطلب رو به متغیر @Post_ID و آی پی کاربر رو به متغیر @IP در اون SP ارسال می کنید. وقتی که عمل Insert رو انجام دادید باید یک SP دیگه رو فراخوانی کنید که عمل Count رو بر اساس @Post_ID انجام می ده که باز مثل قبل از طریق QueryString به متغیر @Post_ID این مقدار رو ارسال می کنید:



Select Count([Post_ID]) FROM Likes WHERE [Post_ID] = @Post_ID


وقتی این تابع اجرا شد، مقدار عددی برای شما برگشت داده خواهد شد که می تونید به کاربر نشون بدید.

مرسی دوست عزیز میتونید یک نمونه سمپل برام بزارید ؟ کدش رو اگر میشه بزارید تا بهتر متوجه شم . مشکل با بیرون کشیدن ای پی پست هست نمی دونم چطوری آی پی پست مورد نظر را بیرون بکشم . ببینید من یک گرید ویو دارم و در ItemTemplate یک label که موضوع پست رو نشون میده یک تکست که متن رو نشون میده و یک دکمه برای لایک . حالا مثلا ما 10 پست داریم در پست اول روی دکمه لایک کلیک شود یکی به لایک های پست اول اضافه شود و بقیش هم شرایط بالا رو داشته باشد. کد ها رو با توضیح میزارم امیدوارم متوجه منظورم شده باشید. ایم کد ها درون همون دکمه لایکی که در گرید ویو هست نوشته شده و چون برای تست هست اونجا نوشتم.

int daryaft;
string cc2;
cc2 = HttpContext.Current.Request.UserHostAddress;
Response.Write(cc2);
SqlConnection my_cn = new SqlConnection("Data Source=.;Initial Catalog=like;Integrated Security=True");
my_cn.Open();
// چک میکنیم ببینیم که در جدول نگه دارنده ای پی کاربر ای دی پست و ای پی کار بر وجود دارد یا نه

foreach (GridViewRow ros2 in GridView1.Rows)
{

var lili0 = ros2.FindControl("lblid") as Label;

daryaft = Int32.Parse( lili0.Text);
}

SqlCommand cm = new SqlCommand("select iplike from plot where iplike='"+cc2+"' and idpost='"+daryaft.ToString()+"'",my_cn);
SqlDataReader rd = cm.ExecuteReader();
if (rd.HasRows == false)
{

Response.Write("<script>alert('نیست');</script>");
rd.Close();
SqlCommand cm2 = new SqlCommand(" update plor set idlike=idlike+1 where id=1",my_cn);

foreach (GridViewRow ros in GridView1.Rows)
{

var lili = ros.FindControl("lblid") as Label;

SqlCommand cm3 = new SqlCommand("insert into lot" + "(iplike,idpost)" + "values('" + cc2 + "','" + lili.Text + "')", my_cn);
cm3.ExecuteNonQuery();
break;
}

cm2.ExecuteNonQuery();
my_cn.Close();
GridView1.DataBind();
}
else
{

}
my_cn.Close();





میدونم روشم اشتباه هست ولی هرچی تو ذهنم بود پیاده کردم خواهش میکنم شما روش درست رو بهم بگید مرسی

اوبالیت به بو
سه شنبه 22 اسفند 1391, 19:23 عصر
درود بر شما


مرسی دوست عزیز میتونید یک نمونه سمپل برام بزارید ؟ کدش رو اگر میشه بزارید تا بهتر متوجه شم . مشکل با بیرون کشیدن ای پی پست هست نمی دونم چطوری آی پی پست مورد نظر را بیرون بکشم .

شما در DataBase فیلد IP رو از نوع رشته بگیرید و با مقادیر تست امتحان کنید. این قطعه از پروژه رو بسازید بعد در نهایت دستور بدست آوردن آی پی رو یاد میگیرید. اما شما اول مراحل گفته شده رو بسازید. حالا به جای آی پی یک مقدار رشته ای به صورت تست و امتحانی بدید و ببینید که درست کار می کنه، وقتی مطمئن شدید بعد این قسمت.

Ramin-sh-t
یک شنبه 01 آذر 1394, 15:39 عصر
سلام
آقا منم توی این قسمت مشکل دارم ، اما مشکلم با IP ها هست...
کاربر های مهمان با هربار وصل شدن به اینترنت یکIPمتفاوتی میگیرند یا به عبارت دیگه ، IP کاربران دائما در حال تغییر هست!
برای رفع این مشکل آیا راهی هست ؟؟؟ (راهی به غیر از عضو شدن کاربران)