• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در استخراج اطلاعات از جدول - حل شد
#1
Lightbulb 
با سلام و درود فراوان . . . .
دوستان من در حال نوشتن کد های login.php بودم که متوجه یه مشکل شدم!
اول شرح login.php رو بگم: بعد از دریافت نام کاربری و رمزعبور ، نام کاربری و رمزعبور رو به صورت زیر استخراج میکنم:
کد پی‌اچ‌پی:
Select username password from users where username='$username' and password='$pass_hash' 
و بعد از استخراج مقدار بازگشتی رو با mysqli_fetch_array جدا میکنم و نام کاربری و رمزعبور استخراج شده رو با وارد شده مقایسه میکنم.
حالا مشکل اینحاست که وقتی نام کاربری در پایگاه داده Admin باشه و ما برای ورود نام کاربری رو admin بزنیم رکورد Admin استخراج میشه و موقع مقایسه نام کاربری چون Admin!=admin وارد نمیشه و ارور میده.

حالا چیکار کنم که اگه نام کاربری رو admin وارد کردیم فقط admin رو جستحو کنه و Admin رو جستجو نکنه.

در کل یعنی به کوچک و بزرگ بودن حروف حساس باشه.

دوستان همینک به یاری سبزتان نیازمندیم.

با تشکر.
  پاسخ
تشکر شده توسط :
#2
وقتی میخای چک کنی از تابع strtolower استفاده کن که تمام حروف رو کوچیک کنه
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : MR-AMIR
#3
ممنون از اینکه پاسخ دادید. اما مشکل من با این کار حل نمیشه! اگه از این تابع استفاده کنم Admin و admin و ADMIN و ... همگی میشن admin و نتنها مشکلم حل نمیشه بلکه سخت تر هم میشه!

العان دقیقاً مشکلم اینه که کاری کنم mysql به کوچک و بزرگ بودن حروف حساس باشه. بعنی وقتی کوئری زیر رو اجرا میکنم . . .
کد پی‌اچ‌پی:
select from users where username='AdMiN' 
فقط و فقط رکورد AdMiN رو بیرون بکشه و ADMIN ، Admin ، adMin و ... رو بیرون نکشه!!!

سلام و درود فراوان . . .

آقایون مشکل حل شد. یکی از دوستان در وبسایت stackoverflow و در این مبحث راه حلی پیشنهاد داد که کار ساز بود.

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

از طریق جستجوی باینری . . . به این صورت:
کد پی‌اچ‌پی:
select from users where usernameBINARY 'Admin' 
به همین سادگی به همین خوشمزگی :دی

منبع: dev.mysql.com
  پاسخ
تشکر شده توسط : molana
#4
خب مشکل اینه که از ابتدا نباید اجازه بدی که حروف بزرگ توی نام کاربری قرار بگیره.
باید همش کوچیک باشه

اما چون کاراکتر انکودینگ دیفالتmysql به کوچیکی و بزرگی حروف حساس نیست باید کولکتش رو عوض کنی که همین روشی که گفتی یکیش هستش
اما BINERY باید قبل از نام فیلد قرار بگیره

یا به این شکل هم می شه استفاده کرد:
کد:
SELECT *  FROM `users` WHERE CAST(`username` AS BINARY) = 'Admin'
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : MR-AMIR


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان