PDA

View Full Version : شارژ حساب کاربری



korosh00
یک شنبه 06 بهمن 1392, 11:08 صبح
سلام
کاربر وارد سایت میشه و مبلغ مورد نظر را وارد میکنه .
ما چطوری یکماه دیگه بهش اجازه دسترسی بدیم مثلا بگیم شما الان 92/11/06 است تا 92/12/06 حسابتان شارژ شد . این اضافه کردن خودکار به تاریخ چجوری است ؟
ممنون

mamad174
یک شنبه 06 بهمن 1392, 11:25 صبح
اگر از متغیر datetime استفاده کنید اینطور میشه



datetime expiretime=new datetime();
expiretime = f.AddMonths(1).ToString()


اگر متغیر expiretime رو به فیلدت add کنی تاریخ 1 ماه بعد رو میده

korosh00
یک شنبه 06 بهمن 1392, 13:32 عصر
یک کم راهنمایی بیشتر این f چی هست . از چه نوعی تعریف میشه ؟

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


DateTime dt1 = DateTime.Now;
string date = pc.GetYear(dt1).ToString() + "/" + pc.GetMonth(dt1).ToString() + "/" + pc.GetDayOfMonth(dt1).ToString();


حالا بخوام یک ماه بعد این تاریخ را نمایش بده چکار کنم .

vira1368
یک شنبه 06 بهمن 1392, 19:57 عصر
من روی کد خودتون اعمال میکنم که بهتر متوجه بشین:

DateTime dt1 = DateTime.Now;
string date = pc.GetYear(dt1).ToString() + "/" + pc.GetMonth(dt1).ToString() + "/" + pc.GetDayOfMonth(dt1).ToString();
Response.Write(date + "<br />");
dt1 = dt1.AddMonths(1);
date = pc.GetYear(dt1).ToString() + "/" + pc.GetMonth(dt1).ToString() + "/" + pc.GetDayOfMonth(dt1).ToString();
Response.Write(date);

korosh00
یک شنبه 06 بهمن 1392, 20:10 عصر
تشکر
فقط اینکه خودش سی روز یا سی و یک روز را متوجه هست دیگه درسته !

korosh00
یک شنبه 06 بهمن 1392, 20:14 عصر
خوب الان تاریخ انقضا را ثبت کردیم .
در برنامه چی میگیم که خودش متوجه بشه .
مثلا هر وقت رسید به تاریخ مورد نظر چی بشه ؟ مقدار فیلدی را 0 بگذار یا چی ؟
یا فقط اونهایی را نمایش بده که تاریخشون بین ثبت و انقضاست ؟
چی ؟
ممنون هستم

vira1368
یک شنبه 06 بهمن 1392, 21:10 عصر
بله در کلاس DateTime به میلادی و در کلاس PersianCalendar به شمسی ماه ها رو حساب میکنه کدوم ماه 30 یا 31 روز هست، حتی سالهای کبیسه هم توش تعریف شده.
به نظرم یک فیلد برای هر کاربر بذارید مثلا confirm از نوع bit
تا زمانی که تارخ به expierDate نرسیده فیلد confirm مقدارش true باشه، و هنگامی که زمان منقضی شد مقدارش false بشه.
برای دسترسی هر کاربر هم همین فیلد confirm چک بشه
امیدوارم خوب راهنمایی کرده باشم :لبخندساده:

korosh00
یک شنبه 06 بهمن 1392, 21:19 عصر
ببینید این چک کردن چجوری صورت میگیره .
اول کار که true هست حالا کاربر وارد سایت میشه تو pageload صفحه چک می کنیم اگر مقدار تاریخ از تاریخ الان گذشته بود مقدار فیلد را false کنه و خوب کاربر هم نمی تونه وارد بشه یا موارد دیگر .
درسته؟
می تونید ی نحوی چک کردن برام بگذارید ؟
ممنون هستم

vira1368
یک شنبه 06 بهمن 1392, 21:30 عصر
دقیقا مثل چک کردن user, pass برای ورود کاربر!
همون موقع که کاربر اطلاعات رو وارد میکنه برای ورود وشما چک میکنید، همزمان چک کنید این user اجازه دسترسی (confirm) دارد یا خیر؟ اگر true بود وارد بشه در غیر اینصورت نه.
اگر هم ورود برای همه مجاز هست و دسترسی به بعضی منابع مانند دانلود از سایت احتیاج به شارژ حساب داره بعد از ورود مقدار confirm رو واکشی کنید و فقط در نمایش منابع ویژه دسترسی رو چک کنید.

korosh00
یک شنبه 06 بهمن 1392, 21:53 عصر
منظورم اینه چطوری خودش دیتابیس را پر کنه ؟
بعدش چطور تاریخ رابفهمه از انقضاء گذشته ؟
مثلا بگه اگر از
if data>92/11/06
مقدار فیلد را false کن .
نباید این در یک global باشه و چک بشه ؟
کونری چک ردن تاریخ چجوری ؟
ممنون

vira1368
دوشنبه 07 بهمن 1392, 15:17 عصر
برای مقایسه 2 تاریخ میتونید از این روش استفاده کنید:

string date = "01/04/2013";
DateTime myDate = DateTime.ParseExact(date, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture) ;
if (myDate > DateTime.Today)
{
Response.Write("greater than");
}
else
{
Response.Write("Less Than");
}


در پروژه شما چون کاری که قرار است انجام بشه مربوط به تمام کاربران سایت هست، یعنی کل سایت رو پوشش میده پس باید در فایل Global.asax این کار انجام بشه. یک مثال میزنم:

void Application_Start(object sender, EventArgs e)
{
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(MyThread));
thread.IsBackground = true;
thread.Name = "MyThread";
thread.Start();
}

void MyThread()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(MyTask);
timer.Interval = 10000;
timer.Enabled = true;
timer.AutoReset = true;
timer.Start();
}

void MyTask(object sender, System.Timers.ElapsedEventArgs e)
{
//My task
}


در این مثال هر کدی که در متد ()MyTask باشه، هر 10 ثانیه یکبار انجام میشه. در واقع این کد یک نمونه برنامه ریزی (Scheduled) برای سایت یه حساب میاد.
نظیر سایت هایی که در زمانی مشخص ایمیلی ارسال میکنند، پیامک می فرستند، یا هر دسترسی رو کنترل میکنند.

korosh00
دوشنبه 07 بهمن 1392, 18:22 عصر
تشکر ویژه میرم تست کنم .
فقط اینجا به یکی از سوالات من هم مربوط میشه اونم ارسال ایمیل در زمان آینده است از همین روش استفاده میشه ؟
من تیک ارسال را بزنم و سایت را ببندم و برم خودش یکساعت دیگه همه را ارسال کنه !!
ممنون این را هم حل کنید خیلی کارم راه می افته .

korosh00
دوشنبه 07 بهمن 1392, 18:26 عصر
راستی من چجوری اون چک کردن را انجام بدم . چجوری بگم فیلدهای تاریخ انقضارا ببین هر کدام گذشته بود فلان کار را بکن ؟
ممنون

vira1368
دوشنبه 07 بهمن 1392, 18:57 عصر
بله از همین روش استفاده میشه، ببینید برنامه های تحت وب روی سرور همیشه آنلاین هستن و لازم نیست شما اون رو باز نگه دارید. خودش رو سرور کار رو انجام میده.
اگر نام فیلدهای جدولتون رو بگید من بهتر میتونم کد بدم.

korosh00
دوشنبه 07 بهمن 1392, 19:21 عصر
من یک جدول دارم بنام آگهی agahi
فیلدها :
idagahi,iduser,nameagahi,ghemateagahi,aksagahi,tar ikhsabtnam,tarikhengheza,taeed
آی دی کاربر
آی دی آگهی
نام آگهی
قیمت آگعی
عکس آگهی
تاریخ ثبت
تاریخ انقضا
تایید

korosh00
سه شنبه 08 بهمن 1392, 12:46 عصر
این سوال را بی جواب نگذارید . فقط در global چطوری باید چک کرد مقادیر فیلد انقضاء و اگر تاریخ گذاشته بود مقدار فیلد تایید برابر صفر بشه . همین
ممنون

vira1368
سه شنبه 08 بهمن 1392, 14:02 عصر
واقعا ببخشید دیشب یک مسافرت فوری برام پیش اومد و اینترنتم واقعا بی کیفیت هست، به همین دلیل تاخیر افتاد!
همونطور که در پست های قبلی خدمتتون گفتم در فایل Global.asax کافیه کد شبیه به این کار بنویسید:

SqlConnection con = new SqlConnection(@"data source=.\sqlexpress; attachdbfilename=|datadirectory|\Database.mdf; integrated security=true; user instance=True");
con.Open();
SqlCommand cmd1 = new SqlCommand("select * from agahi", con);
SqlDataReader r = cmd1.ExecuteReader();
int count = r.Cast<object>().Count();
string[] idagahi = new string[count], tarikhengheza = new string[count];
int i = 0;
while (r.Read())
{
idagahi[i] = r["idagahi"].ToString();
tarikhengheza[i] = r["tarikhengheza"].ToString();
i++;
}
r.Close();
i = 0;
while (i < idagahi.Length)
{
int d = Convert.ToDateTime(tarikhengheza[i]).CompareTo(DateTime.Now);
if (d == -1)
{
SqlCommand cmd2 = new SqlCommand("update agahi set taeed='false' where idagahi=@idagahi", con);
cmd2.Parameters.AddWithValue("@idagahi", Convert.ToInt32(idagahi[i]));
cmd2.ExecuteNonQuery();
}
i++;
}
con.Close();


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

korosh00
سه شنبه 08 بهمن 1392, 14:28 عصر
متاسفانه هنوز اتفاقی نیفتاده!

vira1368
سه شنبه 08 بهمن 1392, 18:54 عصر
مشکلتون کجاست؟ اگر خطایی میده بفرماین کدوم خط هست!
من تست کردم جواب گرفتم

korosh00
سه شنبه 08 بهمن 1392, 20:03 عصر
هیچ خطایی نمی ده . هیچ کاری انجام نمیشه ؟
همون کد من را تست کردید ؟

vira1368
سه شنبه 08 بهمن 1392, 21:36 عصر
شما در دیتابیستون نوع فیلد تاریخ انقضا رو چی در نظر گرفتین؟ nvarchar ؟

korosh00
سه شنبه 08 بهمن 1392, 22:31 عصر
با اکسس هست از نوع Short Text گرفتم تست کردم مشکلی نداره چون من قبلا تو گرید ویو گفتم تاریخ های گذشته را با رنگ قرمز و هنوز مانده را با رنگ سبز نشون بده خوب نشون میده . یعنی الان مشکل از اونه ؟

vira1368
سه شنبه 08 بهمن 1392, 22:48 عصر
خب در مقایسه 2 تاریخ فکر میکنم مشکل ایجاد بشه! چون دارین متن ذخیره میکنید.

korosh00
سه شنبه 08 بهمن 1392, 23:12 عصر
نه مشکل از تاریخ و مقایسه ها نیست همه اونها فکر کنم درست باشه ! چون من در کوئری آخر گفتم آپدیت کن اونی را که (مثلا آی دی سطر را دادم=99) کار کرد . ولی من می خوام همه سطرها را چک کنه نه فقط سطری که آی دیش 99 است !!
ممنون . این را حل کنید تشکر فراوان

vira1368
چهارشنبه 09 بهمن 1392, 01:26 صبح
بله چون فرمت تاریختون در بانک با فرمت تاریخی که به صورت شمسی تهیه کردین میشه باهم مقایسه کوچکتر و بزرگتر انجام داد.