PDA

View Full Version : مشکل فرم ورود کاربر



naserzadeh
پنج شنبه 12 اردیبهشت 1392, 23:12 عصر
با سلام من یک فرم طراحی کردم که در آن کاربر یوزر نیم و پسوردشو وارد میکنه بعدش به صفحه چک میره آنجا یوزر نیم و پسورد چک میشوند اگه درست بود صفحه اصلی باز میشه میخوام بدونم مشکل کدام کجاست که روی صفحه چک میم.نه
اینم کدام
صفحه لاگین


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ورود به سیستم</title>
<script language="javascript">
function sendform()
{
var u=document.getElementById("tfuser").value;
var p=document.getElementById("tfpass").value;
if((u=="")||(p==""))
{
alert("نام کاربری/رمزعبور را وارد کنید!!!");
}
else
frmlogin.submit();
}
</script>
</head>

<body dir="rtl">
<p>&nbsp;</p>
<p align="center"><img src="images/login.jpg" width="86" height="89" alt="Login"/></p>
<form name="frmlogin" action="Check.php" method="post">
<table width="300" border="0" align="center" cellpadding="5">
<tr>
<td><label>نام کاربری :</label>&nbsp;</td>
<td><label for="tfuser"></label>
<input type="text" name="tfuser" id="tfuser" /></td>
</tr>
<tr>
<td><label>رمز عبور :</label>&nbsp;</td>
<td><label for="tfpass"></label>
<input type="password" name="tfpass" id="tfpass" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="button" name="btnlogin" id="btnlogin" value="ورود" onclick="sendform();"/> <input type="button" name="btnexit" id="btnexit" value="خروج" /></td>
</tr>
</table>
</form>
</body>
</html>


صفحه چک

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
include 'MyTools.php';
if(isset($_POST["tfuser"]))
{
$_username=$_POST["tfuser"];
$_password=$_POST["tfpass"];
$ServerName="localhost";
$Port="3306";
$DBName="NewsManagmentDB";
$user="root";
$pass="";
$link=mysql_connect($ServerName.":".$Port,$user,$pass);
mysql_select_db($DBName,$link);
$sql="select * from administration where username='$_username' and password='$_password'";
$result=mysql_query($sql,$link);
if(mysql_fetch_assoc($result))
{
//goto mainpage
print(Redirect('Main.php') );

}
else
{
//back to login
print(Redirect('login.php'));
}
}
else
{
//back to login
}
?>
</body>
</html>

صفحه فانکشن


<?php
function Redirect($page)
{
$s = "<script language='javascript'>
winndow.navigate('$page');

</script>";
return $s;
}
?>

naserzadeh
جمعه 13 اردیبهشت 1392, 11:41 صبح
کسی نبود کمک کنه

mostafa272
جمعه 13 اردیبهشت 1392, 12:07 عصر
صفحه فانکشن همون MyTools.php هست ؟ در صفحه فانکشن window یه n اضافی دارد.چرا مدام از کد جاوا استفاده می کنید. برای ریدایرکت کردن از تابع هدر استفاده کنید.

header("Location: filename");

engmmrj
جمعه 13 اردیبهشت 1392, 12:32 عصر
روشی که استفاده کرده بودی نه استاندار بود نه با امنیت ، کد تو یکم بهینه کردم یه نگاهی بهش بکن !

if(isset($_POST["tfuser"])){
array_map('mysql_real_escape_string',$_POST); // Escape Sql Injection
mysql_connect('localhost:3306','root','');
mysql_select_db('NewsManagmentDB');
$query=mysql_query("SELECT * FROM administration WHERE username='$_POST[tfuser]' AND password='$_POST[tfpass]'");

if( mysql_num_rows($query) == 1 )
{
header('Location:Main.php');
}
else
{
header('Location:login.php');
}
}
else
{
header('Location:login.php');
}

naserzadeh
جمعه 13 اردیبهشت 1392, 12:35 عصر
صفحه فانکشن همون MyTools.php هست ؟ در صفحه فانکشن window یه n اضافی دارد.چرا مدام از کد جاوا استفاده می کنید. برای ریدایرکت کردن از تابع هدر استفاده کنید.

header("Location: filename");

]چجوری از این کد استفاده کنم(مگه مشکلی پیش میاد از جاوا استفاده کنم؟؟؟)

mostafa272
جمعه 13 اردیبهشت 1392, 12:41 عصر
همین شکلی که دوستمون تو این کد بالا نوشتند. من زیاد با جاوا کار نکردم ولی وقتی تابع برای این کار هست نوشتن تابع جدید میشه کار اضافی.

engmmrj
جمعه 13 اردیبهشت 1392, 12:45 عصر
]چجوری از این کد استفاده کنم(مگه مشکلی پیش میاد از جاوا استفاده کنم؟؟؟)
شما وقتی از دستو جاوا برای این کار استفاده میکنی طبیعتا سرعت و امنیت کمتری نسبت به دستورات PHP که سمت سرور است داره .

naserzadeh
جمعه 13 اردیبهشت 1392, 12:50 عصر
میشه کد را برام توضیح بدین آخه من وقتی یوسر نیم وپسورد که admin و 123 هست را وارد میکنم د.وباره ریدایرکت میشه به صفحه لاگین در صورتیکه اگه درست باشه باید صفحه main.php را باز کنه
دستورات else دوتا مثل هم هستن اونا چیکار میکنن تکراری هستن!!

engmmrj
جمعه 13 اردیبهشت 1392, 13:01 عصر
1-در خط اول یک شرط تعریف شده که میگه اگه $_POST["tfuser"] وجود داشت بیا دستور های زیر را انجام بده .
2-در خط دوم هم تمامی مقادیر که با $_POST ارسال میشن را با تابع mysql_real_escape_string اسکیپت می کنه . اطلاعات بشتر در باره تابع array_map (http://ir2.php.net/manual/en/function.array-map.php)
3-خط سوم و چهارم هم کاملا واضح است .
4-خط پنچم هم میگه اگر در کوئری که در بالا گرفتیم یک رکورد وجود داشت بیا دستور های زیر را اجرا کن .
5- و خط های بعدی هم فکر نکنم به توضیح داشته باشد .

naserzadeh
جمعه 13 اردیبهشت 1392, 13:03 عصر
من وقتی یوزر نیم و پسورد راد به درستی وارد میکنم باز هم ریدایرکت میشه به صفحه لاگین مشکل کجاست

engmmrj
جمعه 13 اردیبهشت 1392, 13:16 عصر
خط پنج رو تغییر بدید به کد زیر تا ببینیم چه ارروری میده :

$query=mysql_query("SELECT * FROM administration WHERE username=$_POST[tfuser] AND password=$_POST[tfpass]")or die (mysql_error());

naserzadeh
جمعه 13 اردیبهشت 1392, 13:23 عصر
خط پنج رو تغییر بدید به کد زیر تا ببینیم چه ارروری میده :

$query=mysql_query("SELECT * FROM administration WHERE username=$_POST[tfuser] AND password=$_POST[tfpass]")or die (mysql_error());

Unknown column 'admin' in 'where clause'

من توی دیتابیس یک جدول دارم به اسم administration (http://localhost/phpmyadmin/sql.php?db=newsmanagmentdb&table=administration&token=13440693a08f7c581612b2b172516c82) ,که شامل username,password,email هستش

engmmrj
جمعه 13 اردیبهشت 1392, 13:35 عصر
ببخشید یه مشکل کوچیک در کوئری بود .

$query=mysql_query("SELECT * FROM administration WHERE username='$_POST[tfuser]' AND password='$_POST[tfpass]'");

naserzadeh
جمعه 13 اردیبهشت 1392, 13:41 عصر
if( mysql_num_rows($query) == 1 )
این قطعه کد چه کاری انجام میده؟؟؟؟؟؟؟؟؟؟؟ یوزر نیم و پسورد کجای کد چک میشند که آیا درسته یا غلط

engmmrj
جمعه 13 اردیبهشت 1392, 13:50 عصر
یوزرنیم و پسورد در این خط چک میشه :

$query=mysql_query("SELECT * FROM login WHERE u='$_POST[tfuser]' AND p='$_POST[tfpass]'")
اگر یوزرنیم و پسورد درون table یافت بشه یک رکورد یافت میشه.که با تابع mysql_num_rows چک میکنیم که چند رکورد پیدا شد ، که اگر 1 رکورد یافت شد دسورات زیر را انجام یده .
نکته : تابع mysql_num_rows تعداد رکورد های یک table رو بر می گردونه .

naserzadeh
جمعه 13 اردیبهشت 1392, 14:57 عصر
اگه بخوام یه سشن بنویسم درون یه صفحه دیگم مثل change password که کاربر نتونه مستقیم وارد اون بشه چجوری بنویسم

<?php
session_start();
if(!isset($_SESSION["cmd"]))
header('Location:Login.php?timeout');
?>
اینو من نوشتم ولی ج نمیده

mostafa272
جمعه 13 اردیبهشت 1392, 15:21 عصر
بعد از اینکه کاربر احراز هویت شد باید به سشن مورد نظر مقدار بدی
مثلا

$_SESSION["cmd"]= $id;
بعدش برای اینکه کنترل کنی به چه صفحات دسترسی داشته باشد در اول هر صفحه چک می کنی که آیا سشن مقدار مورد نظر رو داره یا نه اگر داشت که هیچ اگر نداشت باید به صفحه لاگین برگرده.

برای خروج کاربر هم با تابع session_unset یا session_destroy می تونی سشن رو از بین ببری و بعد ریدایرکت کنی به صفحه مورد نظر.

colors
جمعه 13 اردیبهشت 1392, 15:42 عصر
سلام
کد خودت و دوستان خیلی ناقصه.

صفحه ورود:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
<script type="text/javascript">
function checkFrmLogin(){
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
if(username == '' || password == ''){
alert("Username OR Password, not valid!");
document.getElementById('username').focus();
return false;
}
return true;
}
</script>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<form action="" method="post" name="login" onsubmit="return checkFrmLogin();">
<tr>
<td width="90"><label for="username">Username</label></td>
<td><input name="username" type="text" id="username"/></td>
</tr>
<tr>
<td><label for="password">Password</label></td>
<td><input name="password" type="password" id="password"/></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="send" type="submit" value="Login" /></td>
</tr>
</form>
</table>
</body>
</html>

صفحه چک:

<?php
session_start();
$Port="3306";
$DBName="NewsManagmentDB";
$user="root";
$pass="";


# check username
if( isset($_POST['username']) && !empty($_POST['username'])){
# check password
if( isset($_POST['password']) && !empty($_POST['password'])){

# connct to db
$link = mysql_connect("localhost:".$Port, $user, $pass);
mysql_select_db($DBName, $link);

$password = mysql_real_escape_string($_POST['password']);
$username = mysql_real_escape_string($_POST['username']);

# query from db
$query = mysql_query("SELECT * FROM `administration` WHERE `username` = '".$username."' AND `password` = '".$password."'; ");
if(mysql_num_rows($query) == 1){
$user = mysql_fetch_assoc($query);
$_SESSION['user'] = $password;
$_SESSION['id'] = $user['user_id'];
}
else{
header("Location: login.php");
}
}
else{
header("Location: login.php");
}
}
else{
# check user login
if(isset($_SESSION['user']) && !empty($_SESSION['user'])){

# connct to db
$link = mysql_connect("localhost:".$Port, $user, $pass);
mysql_select_db($DBName, $link);

# query from db
$query = mysql_query("SELECT * FROM `administration` WHERE `user_id` = '".$_SESSION['id']."' AND `username` = '".$_SESSION['user']."'; ");
if(mysql_num_rows($query) != 1){
header("Location: login.php");
}
}
header("Location: login.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Control Panel</title>
</head>

<body>
<h1>Welcome To Control Panel...</h1>
</body>
</html>

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

راستی فکر کنم داری آموزشهای تصویری جناب ... انجام میدی, نه!
موفق باشید

naserzadeh
جمعه 13 اردیبهشت 1392, 15:58 عصر
آره درست میگی

naserzadeh
جمعه 13 اردیبهشت 1392, 16:06 عصر
colors عزیز این کدی که دادی اصلا ج نمیده که
من میخوام روی همون کدای قبلیم کار کنم کدام به ترتیب همین فقط میخوام سشن ها اجرا بشه برای صفحه changepassword

Login.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ورود به سیستم</title>
<script language="javascript">
function sendform()
{
var u=document.getElementById("tfuser").value;
var p=document.getElementById("tfpass").value;
if((u=="")||(p==""))
{
alert("نام کاربری/رمزعبور را وارد کنید!!!");
}
else
frmlogin.submit();
}
</script>
</head>
<body dir="rtl">
<p>&nbsp;</p>
<p align="center"><img src="images/login.jpg" width="86" height="89" alt="Login"/></p>
<form name="frmlogin" action="Check.php" method="post">
<table width="300" border="0" align="center" cellpadding="5">
<tr>
<td><label>نام کاربری :</label>&nbsp;</td>
<td><label for="tfuser"></label>
<input type="text" name="tfuser" id="tfuser" /></td>
</tr>
<tr>
<td><label>رمز عبور :</label>&nbsp;</td>
<td><label for="tfpass"></label>
<input type="password" name="tfpass" id="tfpass" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="button" name="btnlogin" id="btnlogin" value="ورود" onclick="sendform();"/> <input type="button" name="btnexit" id="btnexit" value="خروج" /></td>
</tr>
</table>
</form>
<?php
if(isset($_GET["cmd"]))
{
?>
<script language="javascript">
alert('نام کاربری یا رمز عبور اشتباه است!!')
</script>
<?php
}
?>
</body>
</html>

Check.php

<?php
session_start();
if(isset($_POST["tfuser"]))
{
array_map('mysql_real_escape_string',$_POST); // Escape Sql Injection
mysql_connect('localhost:3306','root','');
mysql_select_db('NewsManagmentDB');

$query=mysql_query("SELECT * FROM administration WHERE username='$_POST[tfuser]' AND password='$_POST[tfpass]'");

if( mysql_num_rows($query) == 1 )
{
header('Location:Main.php');

}
else
{
header('Location:Login.php?cmd=error');
}
}
else
{
header('Location:Login.php');
}
?>

changpassword.php
میخوام کاربر نتونه مستقیم وارد این صفحه بشه که باید از سشن استفاده بشه ولی نمیدونم چطوری؟؟؟

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

اینم ضفحه main.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<div align="center" class="style1">Main Page</div>
<a href="ChangPassword.php">ChangePassword</a>
</body>
</html>

colors
جمعه 13 اردیبهشت 1392, 17:01 عصر
خب کاری نداره, تو صفحه تغییر پسورد چک کنه اگه اون سشن وجود داشت و همچنین مقداری داشت, اجازه بده, در غیر این صورت ریدایرکت کن.


if(!isset($_SESSION['user']) && empty($_SESSION['user'])){
header("Location: login.php");
}

naserzadeh
جمعه 13 اردیبهشت 1392, 18:22 عصر
خب کاری نداره, تو صفحه تغییر پسورد چک کنه اگه اون سشن وجود داشت و همچنین مقداری داشت, اجازه بده, در غیر این صورت ریدایرکت کن.


if(!isset($_SESSION['user']) && empty($_SESSION['user'])){
header("Location: login.php");
}
وقتی کد بالا را داخل کد changpassword وmain میزارم ریدایرکت میکنه به لاگین پیج
یعنی وقتی من با نام کاربری و پسورد صحیح وارد میشن نمیتونم وارد main پیج بشم آخه کد را اونجا هم نوشتم و همچنین نمیتونم وارد صفحه changpassword بشم ریدایرکت میشه به لاگین پیج
منظور از $_SESSION['user'] چی هستش >>> user از کجا میزاریم توی سشن

colors
جمعه 13 اردیبهشت 1392, 19:06 عصر
بردار من تو که چیزی از php بلد نیستی مگه مجبوری که سیستم لاگین میسازی.
بهتره بری یکم مطالعه در مورد php داشته باشی تا حداقل خودت بفهمی داری چی مینویسی !!

از آموزش جناب شهرکی تو تاپیک های اعلان همین بخش php استفاده کن

naserzadeh
جمعه 13 اردیبهشت 1392, 19:08 عصر
بردار من تو که چیزی از php بلد نیستی مگه مجبوری که سیستم لاگین میسازی.
بهتره بری یکم مطالعه در مورد php داشته باشی تا حداقل خودت بفهمی داری چی مینویسی !!

از آموزش جناب شهرکی تو تاپیک های اعلان همین بخش php استفاده کن
لطف کن اگه بلدی بگو اگه هم نه دیگه لازم نیست چیزیبگی من تازه شروع کردن اینم اولین مثالمه
شما که بلدی یه کد دادی که اصلا اجرا نمیشه

engmmrj
جمعه 13 اردیبهشت 1392, 19:09 عصر
اول بهتره شما قشنک نحوه کار با سشن رو یاد بگیرد بعد اقدام به نوشتن یک فرم لاگین کنید .
اینم یک منبع خوب : PHP.net (http://ir2.php.net/manual/en/book.session.php)

naserzadeh
جمعه 13 اردیبهشت 1392, 19:25 عصر
بابا من خوندمش ولی برام گنگه فقط کمک خواستم

naserzadeh
جمعه 13 اردیبهشت 1392, 20:01 عصر
دستدوستان گلم درد نکنه شما باعت شدین من یه چیزایی یاد بگیرم درستش کردم اگه باعث ناراحتی کسی شدم ببخشید مخصوصاcolors

naserzadeh
جمعه 13 اردیبهشت 1392, 20:22 عصر
برا این صفحه منو راهنمایی میکنید میخوام پسورد ادمین را تغییر بدم

<?php
session_start();
if(!isset($_SESSION["tf"])){
header('location:login.php?timeout');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>تغییر پسورد مدیریت</title>
</head>
<body dir="rtl">
<table width="300" border="0" align="center" cellpadding="0">
<tr>
<td><label>نام کاربری فعلی :</label></td>
<td><label for="tfpass"></label>
<input type="password" name="tfpass" id="tfpass" /></td>
</tr>
<tr>
<td><label>نام کاربری جدید :</label></td>
<td><label for="tfnewpass"></label>
<input type="password" name="tfnewpass" id="tfnewpass" /></td>
</tr>
<tr>
<td><label>تکرار نام کاربری جدید :</label></td>
<td><label for="tfrenewpass"></label>
<input type="password" name="tfrenewpass" id="tfrenewpass" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="btnchange" type="button" id="btnchange" value="تغییر" /><input name="btnexit" type="button" id="btnexit" value="خروج" /></td>
</tr>
</table>

</body>
</html>

engmmrj
شنبه 14 اردیبهشت 1392, 01:04 صبح
بهترین منبع w3schools (http://www.w3schools.com/php/php_mysql_update.asp)