PDA

View Full Version : سوال: چرا این شرط true برمی گردونه؟



ghazal_mohammady
یک شنبه 05 مرداد 1393, 15:06 عصر
عرض ادب
برای اینکه از جذف اعضاء در برنامه توسط افراد غیر مدیر جلوگیری کنم، تو لود فرم حذف کاربر این کد رو نوشتم:

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 میشه !!!

mhsmity
یک شنبه 05 مرداد 1393, 16:34 عصر
"مدیر ".Trim()

ghazal_mohammady
یک شنبه 05 مرداد 1393, 23:46 عصر
"مدیر ".Trim()


نه به این خاطر نود، خودم این فاصله رو گذاشتم که مثل اونی بشه که تو بانکه ولی بازم نشد.

Mahmoud.Afrad
یک شنبه 05 مرداد 1393, 23:56 عصر
نوع ستون رو از نوع varchar انتخاب (تا spaceها رو پاک کنی) و مقادیر رو انگلیسی ذخیره کنید. در اینصورت به جای 'مدیر' از admin استفاده میکنی.
اما بهتره:
در این چنین مواقعی بایست از یک جدول برای نگهداری انواع کاربر و سطح دسترسی استفاده کنی و از آیدی اون در جدول user به عنوان کلیدخارجی استفاده کنی.

ghazal_mohammady
دوشنبه 06 مرداد 1393, 00:07 صبح
نوع ستون رو از نوع varchar انتخاب (تا spaceها رو پاک کنی) و مقادیر رو انگلیسی ذخیره کنید. در اینصورت به جای 'مدیر' از admin استفاده میکنی.
.
خیلی سپاس گزارم،اما یعنی دیگه نمیتونم فارسی اسمی برای مدیریت ذخیره کنم؟

abbas.oveissi
دوشنبه 06 مرداد 1393, 00:36 صبح
خیلی سپاس گزارم،اما یعنی دیگه نمیتونم فارسی اسمی برای مدیریت ذخیره کنم؟
یک راه حلش بعضی وفتا یک فیلد اضافه کنید مثلا NickName تا بتونید از اون برای نمایش فارسی استفاده کنید.برای شرط ها از فیلد اصلی که انگلیسی هست استفاده کنید.

mhsmity
سه شنبه 07 مرداد 1393, 15:58 عصر
نه به این خاطر نود، خودم این فاصله رو گذاشتم که مثل اونی بشه که تو بانکه ولی بازم نشد.

سلام امکان نداره چون شما این جا از تریم استفاده کردی user.category.Trim() کلمه مدیر شما نباید اخرش فاصله وجود داشته باشه .

اما در باره نوع داده :
بهتره که نوع داده خود رو nvarchar بزرای ولی فکر نکنم مشکل خاصی هم با varchar داشته باشی ولی موقه ذخیره داده حواست باشه که این طوری ذخیره کنی

'مقدار فارسی'N
حواست باشه N بزرگ سمت چپ دو علامت '' باشه و مقدار فارسی هم داخلش
'مدیر'UserName=N
'"+TxtName.text+"'UserName=N

تازه یه Breck POint بزار روی If با موس روی متغیر user.category نگه دار بین چی داخل این متغییر وجود داره ؟

شاید اصلا این متغییر جای مقدار دهی نشده باشه
شاید اصلا چیزی که مد نظزت هست داخل این متغییر نباشه

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

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

akbar8298
سه شنبه 07 مرداد 1393, 16:35 عصر
C#‎‎ گاهی اوقات با کاراکتر های فارسی به مشکل بر می خوره. یه بار کد رو اینجوری تست کنید شاید جواب داد
user.category.Trim().equal("مدیر")