چرا این شرط true برمی گردونه؟
عرض ادب
برای اینکه از جذف اعضاء در برنامه توسط افراد غیر مدیر جلوگیری کنم، تو لود فرم حذف کاربر این کد رو نوشتم:
private void frmUserDelete_Load(object sender, EventArgs e)
{
User user = new User();
user.Id = Form1.currentUser;
user.GetOne();
if (user.category.Trim() != "مدیر ")
{
MessageBox.Show("!شما به این قسمت دسترسی ندارید", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Stop);
this.Close();
}
}
با اینکه user.category باز هم مدیر برمیگردونه، اما شرط true میشه !!!
نقل قول: چر این شرط true برمی گردونه؟
نقل قول: چر این شرط true برمی گردونه؟
نقل قول:
نوشته شده توسط
mhsmity
نه به این خاطر نود، خودم این فاصله رو گذاشتم که مثل اونی بشه که تو بانکه ولی بازم نشد.
نقل قول: چرا این شرط true برمی گردونه؟
نوع ستون رو از نوع varchar انتخاب (تا spaceها رو پاک کنی) و مقادیر رو انگلیسی ذخیره کنید. در اینصورت به جای 'مدیر' از admin استفاده میکنی.
اما بهتره:
در این چنین مواقعی بایست از یک جدول برای نگهداری انواع کاربر و سطح دسترسی استفاده کنی و از آیدی اون در جدول user به عنوان کلیدخارجی استفاده کنی.
نقل قول: چرا این شرط true برمی گردونه؟
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
نوع ستون رو از نوع varchar انتخاب (تا spaceها رو پاک کنی) و مقادیر رو انگلیسی ذخیره کنید. در اینصورت به جای 'مدیر' از admin استفاده میکنی.
.
خیلی سپاس گزارم،اما یعنی دیگه نمیتونم فارسی اسمی برای مدیریت ذخیره کنم؟
نقل قول: چرا این شرط true برمی گردونه؟
نقل قول:
نوشته شده توسط
ghazal_mohammady
خیلی سپاس گزارم،اما یعنی دیگه نمیتونم فارسی اسمی برای مدیریت ذخیره کنم؟
یک راه حلش بعضی وفتا یک فیلد اضافه کنید مثلا NickName تا بتونید از اون برای نمایش فارسی استفاده کنید.برای شرط ها از فیلد اصلی که انگلیسی هست استفاده کنید.
نقل قول: چر این شرط true برمی گردونه؟
نقل قول:
نوشته شده توسط
ghazal_mohammady
نه به این خاطر نود، خودم این فاصله رو گذاشتم که مثل اونی بشه که تو بانکه ولی بازم نشد.
سلام امکان نداره چون شما این جا از تریم استفاده کردی user.category.Trim()
کلمه مدیر شما نباید اخرش فاصله وجود داشته باشه .
اما در باره نوع داده :
بهتره که نوع داده خود رو nvarchar بزرای ولی فکر نکنم مشکل خاصی هم با varchar داشته باشی ولی موقه ذخیره داده حواست باشه که این طوری ذخیره کنی
'مقدار فارسی'N
حواست باشه N بزرگ سمت چپ دو علامت '' باشه و مقدار فارسی هم داخلش
'مدیر'UserName=N
'"+TxtName.text+"'UserName=N
تازه یه Breck POint بزار روی If با موس روی متغیر user.category نگه دار بین چی داخل این متغییر وجود داره ؟
شاید اصلا این متغییر جای مقدار دهی نشده باشه
شاید اصلا چیزی که مد نظزت هست داخل این متغییر نباشه
اونجا که گفته شده از نام لاتین استفاده کنی اصلا مهم نیست با فارسی هم می تونی به این شیوه کار کنی اگه خواستی اصلا به این موضوع توجه نکن
ان نکته رو هم بگم که برای جدول نام های کاربری اصلا لازم نیست که id تعریف کنی با همون نام کاربری موتونی کار ایدی رو هم انجام بدی یعنی نام کاربری رو کلید اصلی کن و اجازه هم نده که این فیلد خالی یا همون نال باشه.
حله
نقل قول: چرا این شرط true برمی گردونه؟
C# گاهی اوقات با کاراکتر های فارسی به مشکل بر می خوره. یه بار کد رو اینجوری تست کنید شاید جواب داد
user.category.Trim().equal("مدیر")