PDA

View Full Version : ورود کاربر و MD5



Bahram0110
شنبه 30 تیر 1386, 11:22 صبح
با سلام
من با کد زیر برای لاگین کردن کاربرا به سایت استفاده می کنم


$name = $_POST['name'];
$pass = $_POST['pass'];

$query = "SELECT * FROM `users` WHERE username='$name' AND password='md5($pass)'";
echo md5($pass);



مقدار md5($pass) با مقدار ذخیره شده در دیتابیس برابره ولی نمی دونم چرا می گه با هم برابر نیستند !!!

به نظرتون مشکل کار از کجا می تونه باشه؟

hidensoft
شنبه 30 تیر 1386, 12:17 عصر
اینو امتحان کن :

$query = 'SELECT * FROM users WHERE username="$name" AND password="md5($pass)"';

I,Nobody
شنبه 30 تیر 1386, 12:21 عصر
ممکنه طول فیلد password توی تیبل دیتابیست رو کم در نظر گرفتی. مثلاً VARCHAR(50) و این باعث میشه گاهی اوقات پسورد MD5 شده، بطور کامی ذخیره نشه.
شما طولشو بیشتر کن، پسورد رو مجدداى ذخیره کن، حالا لاگ این کن

tabib_m
شنبه 30 تیر 1386, 13:14 عصر
شاید هم باید تابع md5 رو خارج از کد اس کیو ال صدا بزنی
یعنی اول بریز توی یک متغیر ، بعد بذار تو کوئری:


$thePass=md5($pass);
$query = "SELECT * FROM `users` WHERE `username`='$name' AND `password`='$thePass'"

Bahram0110
شنبه 30 تیر 1386, 16:38 عصر
ممکنه طول فیلد password توی تیبل دیتابیست رو کم در نظر گرفتی.
طول فیلد پسوردو 50 در نظر گرفتم که فکر کنم کافی باشه :متفکر:


شاید هم باید تابع md5 رو خارج از کد اس کیو ال صدا بزنی
یعنی اول بریز توی یک متغیر ، بعد بذار تو کوئری:


$thePass=md5($pass);
$query = "SELECT * FROM `users` WHERE `username`='$name' AND `password`='$thePass'"

این کارو هم قبلا انجام دادم ولی جواب نداد
همانطور که تو پست اول هم نوشتم با تابع echo رمز شدهء پسورد رو تو صفحهء خطا نشون می دم و با مقدار موجود در بانک به صورت چشمی!!! هم مقایسه کردم با هم برابر بودن

moohssenn
شنبه 30 تیر 1386, 17:46 عصر
متغیر های نام و پسوردتو براشون trim استفاده کن

I,Nobody
شنبه 30 تیر 1386, 22:20 عصر
طول 50 کمه.
مطمئنم که مشکل همینه

Bahram0110
یک شنبه 31 تیر 1386, 00:43 صبح
بازم نشد
به این عکسا نگاه کنید


http://i11.tinypic.com/52c2mwg.jpg


http://i8.tinypic.com/6h554rd.jpg


http://i14.tinypic.com/4xwn6ae.jpg[/url]


http://i16.tinypic.com/4qfmgld.jpg


پسورد رمز شده رو بین دو تا " " قرار دادم! همونطور که می بینید به trim نیاز نداره ولی trim رو هم امتحان کردم

طول متن رمز شده (برای پسورد کنونی) از 35 بالاتر نمی ره و متن رمز شده بطور کامل تو دیتابیس ذخیره می شه

فکر کنم نوبت من که رسید همهء قانون های کامپیوتر به هم خوردن :ناراحت:

tabib_m
یک شنبه 31 تیر 1386, 10:33 صبح
خوب شما یه تست دیگه هم بکن:
کوئری مربوطه رو echo کن (به صورت کامل) و بعد نتیجه رو ببر توی خود phpMyAdmin اجراش کن (توی بخش SQL)، ببین نتیجه میده یا نه...

موفق باشید.

Bahram0110
یک شنبه 31 تیر 1386, 11:06 صبح
خوب شما یه تست دیگه هم بکن:
کوئری مربوطه رو echo کن (به صورت کامل) و بعد نتیجه رو ببر توی خود phpMyAdmin اجراش کن (توی بخش SQL)، ببین نتیجه میده یا نه...

موفق باشید.

می شه بیشتر راهنمایی کنید؟ :لبخند:

moohssenn
یک شنبه 31 تیر 1386, 17:43 عصر
قبل از query$ یک echo بنویس یا توی خط پائینی بنویسید echo $query
بعد همانطور که گفتند خط کوئری نمایش داده شده را ببرید توی phpmyadmin و توی قسمت sql اجرا کنید ببینید نتیجه میده یا نه .
در ضمن در مورد trim یه بار هم موقع ریختن مقدار توی فیلد مربوطه تست کن

cybercoder
یک شنبه 31 تیر 1386, 20:08 عصر
طول فیلد شما باید به اندازه کافی باشه. یادتون باشه که MD5 . 128 بیت هستش.
همچنین همون طور که آقای حائری عزیز گفتن شما در Syntax ایراد داری
این طور بنویس


$query=sprintf("select * from users where username=%s AND password=%s",$_POST['username'],md5($_POST['password']) )
موفق باشید.

Bahram0110
سه شنبه 02 مرداد 1386, 00:09 صبح
ممنون از همه دوستان
مشکل رفع شد
md5 رو باید بیرون از کوری بدست بیارم بعد بزارم تو کوری همونی که طبیب جان فرمودند

m2babaey
سه شنبه 02 مرداد 1386, 04:13 صبح
در ضمن هیچ وقت اطلاعات فرم رو همینطوری وارد دیتابیس نکنید. یک وقت دیدید دیتابیستون نیست شد!
نکته دیگه که می تونه موثر باشه (البته ظاهرا اینجا ایرادی نگرفته) استفاده از کاراکتر ` در دو طرف فیلدهای جدول در کد شماست یعنی
where `username`='$name' and `password`='md5($pass)'

cybercoder
چهارشنبه 03 مرداد 1386, 01:34 صبح
در ضمن هیچ وقت اطلاعات فرم رو همینطوری وارد دیتابیس نکنید.

من که جایی دستور Insert ندیدم !!!!!!!!

m2babaey
چهارشنبه 03 مرداد 1386, 04:01 صبح
منظور از وارد کردن اطلاعات insert نبود. هر جایی که دیتابیس query میشه باید حداقل از mysql-real-escape-string استفاده بشه

hidensoft
چهارشنبه 03 مرداد 1386, 08:42 صبح
در ضمن هیچ وقت اطلاعات فرم رو همینطوری وارد دیتابیس نکنید. یک وقت دیدید دیتابیستون نیست شد!
منظورتون باید طزریق SQL باشه !
روش هایه زیادی برای جلوگیری از این کار هست . کافیه یه سرچ بکنید.