View Full Version : عدم لاگین
mr.zenith
شنبه 15 مرداد 1390, 01:40 صبح
سلام
دوستان یک نگاه به این کد بندار=زین.
مشکل اینه که همه چی درسته ولی وقتی اطلاعات درست را هم وارد می کنی لاگین نمیشه
<?php
session_start();
require_once('Connections/cn.php');
$user=mysql_real_escape_string($_POST['txtuser']);
$pass=mysql_real_escape_string($_POST['txtpass']);
$sql="SELECT * FROM login WHERE user='$user'";
$res = mysql_query($sql,$cn);
$a = mysql_fetch_array($res);
$num=mysql_num_rows($res);
if ($num == 1 && a['pass'] == $pass) {
$_SESSION['username'] =$user;
header('Location: dir.php');
echo "hi";
}
else{
header('Location: retry.php');
}
?>
Mr.Moghadam
شنبه 15 مرداد 1390, 01:54 صبح
سلام
دوستان یک نگاه به این کد بندار=زین.
مشکل اینه که همه چی درسته ولی وقتی اطلاعات درست را هم وارد می کنی لاگین نمیشه
<?php
session_start();
require_once('Connections/cn.php');
$user=mysql_real_escape_string($_POST['txtuser']);
$pass=mysql_real_escape_string($_POST['txtpass']);
$sql="SELECT * FROM login WHERE user='$user'";
$res = mysql_query($sql,$cn);
$a = mysql_fetch_array($res);
$num=mysql_num_rows($res);
if ($num == 1 && $a['pass'] == $pass) {
$_SESSION['username'] =$user;
header('Location: dir.php');
echo "hi";
}
else{
header('Location: retry.php');
}
?>
توی شرط $a رو اشتباه نوشته بودی
مثل زیر هم میتونی عمل کنی
$sql="SELECT * FROM login WHERE user='$user' AND pass='$pass'";
$res = mysql_query($sql,$cn);
if(mysql_num_rows($res) > 0 )
{
$_SESSION['username'] =$user;
header('Location: dir.php');
}
idocsidocs
شنبه 15 مرداد 1390, 02:04 صبح
سلام
دوستان یک نگاه به این کد بندار=زین.
مشکل اینه که همه چی درسته ولی وقتی اطلاعات درست را هم وارد می کنی لاگین نمیشه
<?php
session_start();
require_once('Connections/cn.php');
$user=mysql_real_escape_string($_POST['txtuser']);
$pass=mysql_real_escape_string($_POST['txtpass']);
$sql="SELECT * FROM login WHERE user='$user'";
$res = mysql_query($sql,$cn);
$a = mysql_fetch_array($res);
$num=mysql_num_rows($res);
if ($num == 1 && a['pass'] == $pass) {
$_SESSION['username'] =$user;
header('Location: dir.php');
echo "hi";
}
else{
header('Location: retry.php');
}
?>
شما یادتون رفته که علامت $ رو توی کد زیر استفاده کنید:
a['pass']
mr.zenith
شنبه 15 مرداد 1390, 02:27 صبح
دوستان این مشکلاتی که گفتید درست کردم باز هم فقط به صفحه ی retry.php میره.
idocsidocs
شنبه 15 مرداد 1390, 02:52 صبح
دوستان این مشکلاتی که گفتید درست کردم باز هم فقط به صفحه ی retry.php میره.
کدها که مشکلی ندارن، شاید اطلاعات توی جدول مشکل دارن.
برای حل این مشکل کلمه رمز، کلمه کاربری و تعداد ردیفهای بازیابی شده از جدول $num رو نمایش بدید تا ببینید که آیا اطلاعات رو به درستی مقایسه می شن یا نه.
mr.zenith
شنبه 15 مرداد 1390, 03:05 صبح
وقتی با print_r می خواهم $a را نمایش بدم با ارور زیر مواجه می شوم!!!!!!
mysql_fetch_array() expects parameter 1 to be resource, boolean given
مگه mysql_fetch_array یک آرایه بر نمی گردانه؟؟
mr.zenith
شنبه 15 مرداد 1390, 03:07 صبح
در واقع به ایت خط
$a = mysql_fetch_array($res);
ارور میده
alismith
شنبه 15 مرداد 1390, 03:18 صبح
سلام
برای مقایسه پسوردها از strtolower() استفاده کنید و پسوردی که از دیتابیس خارج کردید را ابتدا در htmlspecialchars قرار بدید
امتحان کنید
موفق باشید
alismith
شنبه 15 مرداد 1390, 03:26 صبح
دوست عزیز استفاده از strtolower در زمان register کردن کاربر و login کردن آن هم برای username و هم برای password باید انجام شود
در رابطه با query شما هم بنظرم بهتره که با and پسورد هم چک کنید و بعد تعداد رکورد برگشتی را بررسی کنید
همیشه از die() بعد از header استفاده کنید تا اگر به هر دلیلی redirect نشد اطلاعات دیگه نمایش داده نشه و فقط یک پیام چاپ بشه
موفق باشید
mr.zenith
شنبه 15 مرداد 1390, 03:29 صبح
سلام
برای مقایسه پسوردها از strtolower() استفاده کنید و پسوردی که از دیتابیس خارج کردید را ابتدا در htmlspecialchars قرار بدید
امتحان کنید
موفق باشید
یعنی دستور شرطی ما اینطوری میشه؟
if ($num > 0 && htmlspecialchars ($a['pass'] )== strtolower($pass)
alismith
شنبه 15 مرداد 1390, 03:42 صبح
البته اگر از تابع strtolower در ذخیره پسورد در database استفاده نکردید ، لازم هست که برای پسورد مقایسه شونده هم این کار رو انجام بدید
البته برای تابع htmlspecialchars نیز باید از ENT_QUOTES FLAG استفاده کنید
htmlspecialchars($a['pass'], ENT_QUOTES);
موفق باشید
mr.zenith
شنبه 15 مرداد 1390, 22:52 عصر
بعد از تغییراتی که شما فرمودین کدها شد این:
<?php
session_start();
require_once('Connections/cn.php');
$user=mysql_real_escape_string($_POST['txtuser']);
$pass=mysql_real_escape_string($_POST['txtpass']);
$sql="SELECT * FROM login WHERE user='$user'";
$res = mysql_query($sql,$cn);
$a = mysql_fetch_array($res);
print_r($a);
$num=mysql_num_rows($res);
if ($num > 0 &&htmlspecialchars($a['pass'], ENT_QUOTES) == $pass) {
$_SESSION['username'] =$user;
header('Location: dir.php');
}
else{
header('Location: retry.php');
}
?>
اما بازم نمیشه
علت چی می توانه باشه؟؟؟
از phpmyadmin کوئری را اجرا کردم و جواب داد یعنی مشکل از کوئری نیست.
یعنی از چیه؟
alismith
یک شنبه 16 مرداد 1390, 01:56 صبح
اینو امتحان کن ببین مشکل حل میشه : :متفکر:
$user=mysql_real_escape_string($_POST['txtuser']);
$pass=mysql_real_escape_string($_POST['txtpass']);
//////////////////
$user = strtolower($user);
$pass = strtolower($pass);
//////////////////
$sql="SELECT * FROM login WHERE `user`='$user' AND `pass`='$pass'";
$res = mysql_query($sql,$cn);
if(@mysql_num_rows($res)){
$_SESSION['username'] = $user;
header('Location: dir.php');
die();
}else{
header('Location: retry.php');
die();
}
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.