PDA

View Full Version : سوال: بررسی تاریخ شمسی برای محدود کردن سن شخص در ثبت نام



davidrobert
سه شنبه 01 فروردین 1396, 17:53 عصر
سلام و خسته نباشید.
من یک کامبوباکس سال دارم که به صورت جداگانه تاریخ شمسی رو نشان میدهد . و میخواهم تاریخ شمسی امروز را با مقدار تاریخ شمسی کامبوباکس مقایسه کنم که اگر تاریخ شمسی یا همان سن طرف بیشتر از 20 سال بود ثبت نام را انجام دهد اگر کمتر از 20 سال داشت انجام ندهد.
این رو هم بگم این نوع کد نویسی برای ASP هستش و الان با مشکلی که برخورد دارم این هستش که اگه یک اطلاعات ناقص یا مقادیر خواسته شده اشتباه باشه پیغام alert ظاهر میشه ولی وقتی پیغام ظاهر میشه من میخوام تمام مقادیر داخل کادر متن بماند و از بین نرود ولی هر نوع کد نویسی انجام دادم وقتی پیغام اشکال در اطلاعات ظاهر شد سریعا تمام مقادیر کادر متن به حالت اول و یا خالی میشود. و برای جلویگری اش نمی دانم چیکار کنم اینهم دستورات بنده.
این هم در فرم لود نوشتم.


protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["U_ID_Card"] == null)
{
Response.Redirect("~/Index.aspx");
}
else
{
if (Convert.ToInt32(TxtYear.Text) == 1300)
{
LoadDate();
string sesion = Session["U_ID_Card"].ToString();
var q = from user in db.Tbl_Demo_User_Registration
where user.U_ID_Card == sesion
select new
{
codeemali = user.U_ID_Card,
};
foreach (var value in q)
{
TxtCodeMali.Text = value.codeemali;
}
}
else
{
if (IsPostBack)
{
if (Convert.ToInt32(TxtYear.Text) == 1300)
{
showInfor();
LoadDate();
return;
}
else
{
showInfor();
return;
}
}
}
}
}
}

این دستور هم برای ذخیره نوشتم.

void Save()
{
try
{
string sesion = Session["U_ID_Card"].ToString();
PersianCalendar persian = new PersianCalendar();
string shamsi = TxtYear.Text + "/" + TxtMonth.Text + "/" + TxtDay.Text;
string yearr = shamsi.Substring(0, 4);
string manth = shamsi.Substring(shamsi.Length - 5, 2);
string day = shamsi.Substring(shamsi.Length - 2, 2);
int datebefor = 20;
if (Convert.ToInt32(TxtYear.Text) <= persian.GetYear(DateTime.Now.AddYears(-datebefor).Date))
{
if (TxtShomareHesab.Text.Length < shomarehesab)
{
string script = "window.onload = function(){ alert('";
script += "شماره حساب بانک ملی صحیح نمی باشد.";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
if (TxtPhoneHome.Text.Length > limitPhone)
{
string script = "window.onload = function(){ alert('";
script += "شماره منزل صحیح نمی باشد.";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
if (TxtMoblie.Text.Length > limitPhone)
{
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('شماره موبایل صحیح نمی باشد.');", true);
string script = "window.onload = function(){ alert('";
script += "شماره موبایل صحیح نمی باشد.";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
if (TxtPhoneJob.Text.Length < limitPhone)
{
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('شماره تماس محل کار صحیح نمی باشد.');", true);
string script = "window.onload = function(){ alert('";
script += "شماره تماس محل کار صحیح نمی باشد.";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
else
{
string emial = TxtEmial.Text;
string expression;
expression = "\\w+([-+.\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
if (Regex.IsMatch(emial, expression))
{
if (Regex.Replace(emial, expression, String.Empty).Length == 0)
{
Tbl_Demo_User_Registration tblDemoUserRegistration =
db.Tbl_Demo_User_Registration.First(d => d.U_ID_Card == sesion);
tblDemoUserRegistration.U_Name = TxtName.Text;
tblDemoUserRegistration.U_Last = TxtLast.Text;
tblDemoUserRegistration.U_Semet = "کاربر";
tblDemoUserRegistration.U_Passport = TxtShomariShenasname.Text;
tblDemoUserRegistration.U_Birth_Shamsi_Year = TxtYear.Text;
tblDemoUserRegistration.U_Birth_Shamsi_Month = TxtMonth.Text;
tblDemoUserRegistration.U_Birth_Shamsi_Day = TxtDay.Text;
tblDemoUserRegistration.U_Birth_Miladi =
Convert.ToDateTime(ClsChangeDate.Miladi(yearr, manth, day));
tblDemoUserRegistration.U_Name_Father = TxtnameFather.Text;
tblDemoUserRegistration.U_Brith_City = TxtBornPlace.Text;
tblDemoUserRegistration.U_Home_Phone = Convert.ToInt64(TxtPhoneHome.Text);
tblDemoUserRegistration.U_Name_Bame = TxtNameBamie.Text;
tblDemoUserRegistration.U_Shomare_Bamie = TxtShomareBamie.Text;
tblDemoUserRegistration.U_Shomare_Hesab = TxtShomareHesab.Text;
tblDemoUserRegistration.U_Mobile = Convert.ToInt64(TxtMoblie.Text);
tblDemoUserRegistration.U_Job_Phone = Convert.ToInt64(TxtPhoneJob.Text);
tblDemoUserRegistration.U_Full_Address_Home = txtAddressHome.Text;
tblDemoUserRegistration.U_Full_Address_Job = TxtAddressJob.Text;
tblDemoUserRegistration.U_Emial = TxtEmial.Text;
tblDemoUserRegistration.U_Site = TxtUrl.Text;
if (TxtMale.Checked == true)
{
tblDemoUserRegistration.U_Sex = TxtMale.Text;
}
else if (TxtFemale.Checked == true)
{
tblDemoUserRegistration.U_Sex = TxtFemale.Text;
}
db.SaveChanges();
Session["U_ID_Card"] = TxtCodeMali.Text;
showInfor();
Response.Redirect("~/WebFormuploadInformation/UploadImagePersnoal.aspx");
}
else
{
string script = "window.onload = function(){ alert('";
script += "ایمیل را وارد کنید";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
}
else
{
string script = "window.onload = function(){ alert('";
script += "ایمیل اشتباه می باشد.";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
}
}
else
{
string script = "window.onload = function(){ alert('";
script += "سن شما اشتباه می باشد.";
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
}
catch (Exception ex)
{
string script = "window.onload = function(){ alert('";
script += "خطا در اجرا دستورات / خطا 101." + ex.Message;
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
}

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

Mahmoud.Afrad
چهارشنبه 02 فروردین 1396, 22:09 عصر
ابتدا یک نکته ای رو بگم اون اینکه بهتر هست که قبل از ارسال اطلاعات به سرور، در سمت کلاینت هم عمل Validation رو انجام بدید حالا یا با استفاده از کنترلهای Validation یا با javascript خودتون بنویسید. البته سمت سرور هم بایست عمل validation انجام بشه اما اعتبارسنجی سمت کلاینت و سرور به تنهایی کافی نیستند و بایست با هم وجود داشته باشند.

اما در مورد کدهای شما؛
اولین اشکال کد شما در متد Page_Load هست. خط 28 تا 40 هیچ وقت اجرا نخواهند شد چون در جایی این کد رو نوشتید که postback نبودن را بررسی کردید
if (!IsPostBack)
{
//...
if (IsPostBack)
{
//...
}
}
در مورد مقایسه تاریخ ها(یا بدست آوردن سن)، چون به سن نیازی ندارید بهتر هست هر دو تاریخ (تاریخ تولد و آخرین تاریخ مجاز) را به میلادی بدست بیارید و مقایسه کنید. کدهای تکراری رو هم حذف کنید. و بهتر هست همه اطلاعات رو چک کنید و یک پیام کلی به کاربر بدید. (کد رو خودتون تست کنید)
private void Save()
{
try
{
string sessionIdCard = Session["U_ID_Card"].ToString();
PersianCalendar persian = new PersianCalendar();
int minimumAge = 20;
DateTime maximumBirthDate = persian.AddYears(DateTime.Today, -minimumAge);
DateTime birthDate;
int age = 0;
StringBuilder messages = new StringBuilder();
bool isValid = true;

int year, month, day;
bool yearIsValid = int.TryParse(TxtYear.Text, out year);
bool monthIsValid = int.TryParse(TxtMonth.Text, out month);
bool dayIsValid = int.TryParse(TxtDay.Text, out day);
if (!yearIsValid)
{
messages.AppendLine("سال باید عدد باشد.");
isValid = false;
}
if (!monthIsValid)
{
messages.AppendLine("ماه باید عدد باشد.");
isValid = false;
}
if (!dayIsValid)
{
messages.AppendLine("روز باید عدد باشد.");
isValid = false;
}
if (yearIsValid && monthIsValid && dayIsValid)
{
birthDate = new DateTime(year, month, day, persian); // convert persian Date to gregorian
if (birthDate > maximumBirthDate)
{
messages.AppendLine("سن شما اشتباه می باشد.");
isValid = false;
}
}
if (TxtShomareHesab.Text.Length < shomarehesab)
{
messages.AppendLine("شماره حساب بانک ملی صحیح نمی باشد.");
isValid = false;
}
if (TxtPhoneHome.Text.Length > limitPhone)
{
messages.AppendLine("شماره منزل صحیح نمی باشد.");
isValid = false;
}
if (TxtMoblie.Text.Length > limitPhone)
{
//ClientScript.RegisterStartupScript(this.GetType(), "", "alert('شماره موبایل صحیح نمی باشد.');", true);
messages.AppendLine("شماره موبایل صحیح نمی باشد.");
isValid = false;
}
if (TxtPhoneJob.Text.Length < limitPhone)
{
//ClientScript.RegisterStartupScript(this.GetType(), "", "alert('شماره تماس محل کار صحیح نمی باشد.');", true);
messages.AppendLine("شماره تماس محل کار صحیح نمی باشد.");
isValid = false;
}
string email = txtEmail.Text.Trim(); // TxtEmial.Text;
string expression = "\\w+([-+.\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
if (!Regex.IsMatch(email, expression) || Regex.Replace(email, expression, string.Empty).Length != 0)
{
messages.AppendLine("ایمیل اشتباه می باشد.");
isValid = false;
}

if (!isValid)
{
string script = "window.onload = function(){ alert('";
script += messages;
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}

Tbl_Demo_User_Registration tblDemoUserRegistration = db.Tbl_Demo_User_Registration.First(d => d.U_ID_Card == sessionIdCard);
tblDemoUserRegistration.U_Name = TxtName.Text;
tblDemoUserRegistration.U_Last = TxtLast.Text;
tblDemoUserRegistration.U_Semet = "کاربر";
tblDemoUserRegistration.U_Passport = TxtShomariShenasname.Text;
tblDemoUserRegistration.U_Birth_Shamsi_Year = TxtYear.Text;
tblDemoUserRegistration.U_Birth_Shamsi_Month = TxtMonth.Text;
tblDemoUserRegistration.U_Birth_Shamsi_Day = TxtDay.Text;
tblDemoUserRegistration.U_Birth_Miladi = birthDate;
tblDemoUserRegistration.U_Name_Father = TxtnameFather.Text;
tblDemoUserRegistration.U_Brith_City = TxtBornPlace.Text;
tblDemoUserRegistration.U_Home_Phone = Convert.ToInt64(TxtPhoneHome.Text);
tblDemoUserRegistration.U_Name_Bame = TxtNameBamie.Text;
tblDemoUserRegistration.U_Shomare_Bamie = TxtShomareBamie.Text;
tblDemoUserRegistration.U_Shomare_Hesab = TxtShomareHesab.Text;
tblDemoUserRegistration.U_Mobile = Convert.ToInt64(TxtMoblie.Text);
tblDemoUserRegistration.U_Job_Phone = Convert.ToInt64(TxtPhoneJob.Text);
tblDemoUserRegistration.U_Full_Address_Home = txtAddressHome.Text;
tblDemoUserRegistration.U_Full_Address_Job = TxtAddressJob.Text;
tblDemoUserRegistration.U_Emial = email;
tblDemoUserRegistration.U_Site = TxtUrl.Text;
if (TxtMale.Checked == true)
{
tblDemoUserRegistration.U_Sex = TxtMale.Text;
}
else if (TxtFemale.Checked == true)
{
tblDemoUserRegistration.U_Sex = TxtFemale.Text;
}
db.SaveChanges();
Session["U_ID_Card"] = TxtCodeMali.Text;
showInfor();
Response.Redirect("~/WebFormuploadInformation/UploadImagePersnoal.aspx");
}
catch (Exception ex)
{
string script = "window.onload = function(){ alert('";
script += "خطا در اجرا دستورات / خطا 101." + ex.Message;
script += "');";
script += "window.location = '";
script += "'; }";
ClientScript.RegisterStartupScript(this.GetType(), "Redirect", script, true);
return;
}
}

davidrobert
پنج شنبه 03 فروردین 1396, 12:30 عصر
سلام و تشکر بابت راهنمایی تان ولی در دستور تاریخ که دادید.

tblDemoUserRegistration.U_Birth_Miladi = birthDate;

مقدار birthDate که برای بنده قرار دادید تا تاریخ شمسی به میلادی درایافت کند رو ایراد گرفت.
و همین طور تمام دستور های مربوط رو که دادید Trace گرفتم و گفتم اگه سن طرف کمتر از 20 سال بود یعنی همین مقدار

int minimumAge = 20;
DateTime maximumBirthDate = persian.AddYears(DateTime.Today, -minimumAge);
DateTime birthDate;
int age = 0;

همه مقادیر رو کمتر از حد مورد نظر و سن هم کمتر از 20 سال دادم تمام مقادیر رو Trace کردم سیستم رد کرد ولی اصلا پیغامی نداد.
ممنون بابت کمکتان

Mahmoud.Afrad
پنج شنبه 03 فروردین 1396, 15:07 عصر
اگر میتونی پروژه رو پیام خصوصی کن یا یک پروژه تست ایجاد کن و همینجا قرار بده.