PDA

View Full Version : عدم لاگین



mr.zenith
شنبه 15 مرداد 1390, 00: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, 00: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, 01: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, 01:27 صبح
دوستان این مشکلاتی که گفتید درست کردم باز هم فقط به صفحه ی retry.php میره.

idocsidocs
شنبه 15 مرداد 1390, 01:52 صبح
دوستان این مشکلاتی که گفتید درست کردم باز هم فقط به صفحه ی retry.php میره.
کدها که مشکلی ندارن، شاید اطلاعات توی جدول مشکل دارن.

برای حل این مشکل کلمه رمز، کلمه کاربری و تعداد ردیفهای بازیابی شده از جدول $num رو نمایش بدید تا ببینید که آیا اطلاعات رو به درستی مقایسه می شن یا نه.

mr.zenith
شنبه 15 مرداد 1390, 02:05 صبح
وقتی با print_r می خواهم $a را نمایش بدم با ارور زیر مواجه می شوم!!!!!!
mysql_fetch_array() expects parameter 1 to be resource, boolean given
مگه mysql_fetch_array یک آرایه بر نمی گردانه؟؟

mr.zenith
شنبه 15 مرداد 1390, 02:07 صبح
در واقع به ایت خط

$a = mysql_fetch_array($res);
ارور میده

alismith
شنبه 15 مرداد 1390, 02:18 صبح
سلام

برای مقایسه پسوردها از strtolower() استفاده کنید و پسوردی که از دیتابیس خارج کردید را ابتدا در htmlspecialchars قرار بدید

امتحان کنید

موفق باشید

alismith
شنبه 15 مرداد 1390, 02:26 صبح
دوست عزیز استفاده از strtolower در زمان register کردن کاربر و login کردن آن هم برای username و هم برای password باید انجام شود
در رابطه با query شما هم بنظرم بهتره که با and پسورد هم چک کنید و بعد تعداد رکورد برگشتی را بررسی کنید


همیشه از die() بعد از header استفاده کنید تا اگر به هر دلیلی redirect نشد اطلاعات دیگه نمایش داده نشه و فقط یک پیام چاپ بشه




موفق باشید

mr.zenith
شنبه 15 مرداد 1390, 02:29 صبح
سلام

برای مقایسه پسوردها از strtolower() استفاده کنید و پسوردی که از دیتابیس خارج کردید را ابتدا در htmlspecialchars قرار بدید

امتحان کنید

موفق باشید
یعنی دستور شرطی ما اینطوری میشه؟

if ($num > 0 && htmlspecialchars ($a['pass'] )== strtolower($pass)

alismith
شنبه 15 مرداد 1390, 02:42 صبح
البته اگر از تابع strtolower در ذخیره پسورد در database استفاده نکردید ، لازم هست که برای پسورد مقایسه شونده هم این کار رو انجام بدید

البته برای تابع htmlspecialchars نیز باید از ENT_QUOTES FLAG استفاده کنید


htmlspecialchars($a['pass'], ENT_QUOTES);


موفق باشید

mr.zenith
شنبه 15 مرداد 1390, 21: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, 00: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();
}





موفق باشید