PDA

View Full Version : سوال: بررسی شناسه های کاربر زمان لاگین در php؟



پیام حیاتی
پنج شنبه 06 اسفند 1394, 14:00 عصر
سلام عزیزان
من یک بانک با نام admin و یک جدول با نام user با شناسه های (u_id,u_user,u_pass) به همراه سه فرم به نام های one.php , two.php , three.php ایجاد کرده ام.
در صفحه one.php فرمم قرار دارد :


<form action="two.php" method="post">
<table width="250" border="0" align="center">
<tr>
<td>User : </td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td>Pass :</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Login" /></td>
</tr>
</table>
</form>


در صفحه دوم می خواهم اطلاعات وارد شده کاربر با مقادیر جدول بررسی شود ، در صورت وجود نداشتن پیغام مناسب نمایش دهد و در صورت وجود یک سشن تولید شود و کاربر به صفحه three.php منقل شود ، در صفحه three.php سشن بررسی شود وجود دارد یا خیر ، اگر وجود داشت اطلاعات نمایش داده شود و در صورت عدم وجود به صفحه one.php که همان صفحه فرم هست هدایت شود.
این کدها رو برای صفحه two.php نوشتم :


<?php session_start(); ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Session in PHP_Page Two</title>
</head>


<body>


<?php


$con=mysql_connect("localhost","root","");


if(!$con)
{
die("Colud Not Connect: ".mysql_error());
}

mysql_select_db("school",$con);
$Query="SELECT * FROM user WHERE u_user='$_POST[user]' and u_pass='$_POST[pass]')";


if(!mysql_query($Query,$con))
{
die("Error: ".mysql_error());
}
else
{
$_SESSION['u_id']=$_POST['u_id'];
header("Location:three.php");
}

mysql_close($con);

?>


</body>
</html>


با خطای زیر هنگام لاگین مواجه میشم :


Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1


برای صفحه سوم هم نمیدونم چطور باید سشن رو بررسی کنم.
تشکر.

ravand
پنج شنبه 06 اسفند 1394, 15:01 عصر
به این خط دقت کن :

$Query="SELECT * FROM user WHERE u_user='$_POST[user]' and u_pass='$_POST[pass]')";
پرانتز را اصلا باز نکردی که اینجا بستیش.

پیام حیاتی
پنج شنبه 06 اسفند 1394, 15:30 عصر
اصلاح کردم ، محتوای فایل three.php رو هم به شکل زیر درآوردم :


<?php
session_start();
if(isset($_SESSION['u_id']))
{
echo "Welcome";
}
else
{
header("Location:one.php");
}


?>




<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Session in PHP_Page Three</title>
</head>


<body>






</body>
</html>

اما هر یوزر و پسوردی که وارد کنم در همان صفحه فرم اول (one.php) فقط رفرش می شود.
در دات نت من این کر را انجام داده ام اما معادل دستوراتش در php رو نمیدونم.
کد بررسی لاگین کاربر در دات نت :


SqlCommand cmd = new SqlCommand("select * from Admin where a_name='" + txt_user.Text + "' and a_pass='" + txt_pass.Text +"' ", con);
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
con.Open();
SqlDataReader Reader = cmd.ExecuteReader();
dt.Load(Reader);
con.Close();


if (dt.Rows.Count != 0)
{
Session["a_id"] = dt.Rows[0]["a_id"];


Response.Redirect("Admin.aspx");
}
else
{
Label1.Visible = true;
}

این هم کد بررسی سشن در صفحه مدیریت بعد از لاگین :


if (Session["a_id"] == null)
Response.Redirect("Login.aspx");

ravand
جمعه 07 اسفند 1394, 01:43 صبح
اگر عملیات موفق بود اینو بهش بده:


$_SESSION['login'] = $user;
header("location:ravand.php?page=success");

اگه ناموفق بود اینو:

die("نام کاربری یا رمز اشتباه است.");
exit;

پیام حیاتی
جمعه 07 اسفند 1394, 05:29 صبح
توفیقی حاصل نشد

ravand
جمعه 07 اسفند 1394, 07:23 صبح
من دقیقا نمیدونم مشکلت چیه؟
ولی این کتاب را دانلود کن:
http://www.barnamenevisi.blogsky.com/1391/01/06/post-96/
از اونجایی که نوشته "رمز گذاري با md5 یعنی صفحه ی 34 شروع کن تا اونجایی که طریقه ی ساخت فرم لوگین رو توضیح داده. البته استفاده از دستورات mysql قدیمی شده اگه خواستی pdo رو برات بگم.

پیام حیاتی
جمعه 07 اسفند 1394, 08:22 صبح
ببینید خیلی سادست :
کاربری اطلاعاتش از جمله یوزر و پسورد در بانک ثبت شده حالا می خواد با یوزر و پسوردش لاگین کنه ، اگر یوزر و پسوردش را در فرم درست وارد کرد بره صفحه three.php اگر نه پیام بده یوزر و پس اشتباه هست ، همین!
تئوری کار رو میدونم ولی کدنویسی PHP رو نه ، مثلا اگر یوزر و پسورد اطلاعاتش درست وارد شد یک سشن باید ایجاد بشه که مقدار آی دی جدول یوزر لاگین رو شامل بشه تا در صفحه three.php ابتدا بررسی بشه سشن وجود داره یا خیر اگر نداره برگرده به صفحه فرم. و یا اینکه کدهایی که برای دکمه لاگین نوشتم که select بزنه به جدول برای تشخیص درستی یوزر و پسورد درسه هست یا خیر.

ravand
جمعه 07 اسفند 1394, 09:23 صبح
<form action="chap.php" method="POST">
user<input type="text" name="user"><br>
password<input type="password" name="pass"><br>
<input type="submit" value="ارسال">
</form>



<?php
session_start();
if(isset($_SESSION['login'])) {
//پاك كردن سیژن ھاي قبلي
unset($_SESSION['login']);
}
mysql_connect('localhost', 'root', '') or die ('Connection error');
mysql_select_db('rams') or die ('Database error');
mysql_query('SET NAMES \'utf8\'');
$user = mysql_real_escape_string(strtolower($_POST['user']));
$pass = md5($_POST['pass']);
$qry = "SELECT * FROM `pass` WHERE (LOWER(`user`)='{$user}' AND `pass`='{$pass}')";
$result = mysql_query($qry);
if($result && mysql_num_rows($result) > 0) {
$_SESSION['login'] = $user;
header("location:ravand.php?page=success");
}
else {
echo ".نام كاربري و پسورد اشتباه است";
echo '<p><a href="login.php">Back to login page</a></p>'.PHP_EOL;
}
?>

الان من متوجه نمیشم این که توی اون کتاب بود بهتون معرفی کردم مشکلش چیه؟

پیام حیاتی
شنبه 08 اسفند 1394, 07:51 صبح
با اینکه یوزر و پسورد درست وارد میشه باز پیام شناسه ها استباه است نمایش داده می شود:


session_start();
if(isset($_SESSION['login'])) {
//پاك كردن سیژن ھاي قبلي
unset($_SESSION['login']);
}
mysql_connect('localhost', 'root', '') or die ('Connection error');
mysql_select_db('admin') or die ('Database error');
mysql_query('SET NAMES \'utf8\'');
$user = mysql_real_escape_string(strtolower($_POST['user']));
$pass = md5($_POST['pass']);
$qry = "SELECT * FROM `user` WHERE (LOWER(`u_user`)='{$user}' AND `u_pass`='{$pass}')";
$result = mysql_query($qry);
if($result && mysql_num_rows($result) > 0) {
$_SESSION['login'] = $user;
header("location:three.php");
}
else {
echo ".نام كاربري و پسورد اشتباه است";
echo '<p><a href="one.php">Back to login page</a></p>'.PHP_EOL;
}




139309

ravand
شنبه 08 اسفند 1394, 08:17 صبح
خب علتش اینه که شما به جای اینکه اول پسورد را به md5 تبدیل کنی مستقیم 1111 وارد دیتابیس کردی.
شما اول بیا اینو چاپ کن:


<?php
echo md5(1111);
?>

به نتیجه را به عنوان پسورد در دیتابیس ذخیره کن.

پیام حیاتی
شنبه 08 اسفند 1394, 10:25 صبح
خب علتش اینه که شما به جای اینکه اول پسورد را به md5 تبدیل کنی مستقیم 1111 وارد دیتابیس کردی.
شما اول بیا اینو چاپ کن:


<?php
echo md5(1111);
?>

به نتیجه را به عنوان پسورد در دیتابیس ذخیره کن.
درود بر شما ، مشکل برطرف شد.
من فایل ها رو اینجا قرار میدم شاید به کار دیگری آمد.

ravand
شنبه 08 اسفند 1394, 10:30 صبح
بهتره برای امنیت بیشتر از روش زیر به جای md5 استفاده کنید:

$pass =hash('sha256',$_POST['pass']);

rezaonline.net
شنبه 08 اسفند 1394, 11:08 صبح
function createHash($str = '')
{
$salt = "@#$%^%^&sddeeAdfefsSDdes";
for($i=0;$i<4000;$i++)
$str = hash('sha256',$str.$salt);
return $str;
}


$pass = createHash($_POST['pass']);