PDA

View Full Version : مبتدی: عدم خواندن اطلاعات از دیتابیس



ferry_2020
شنبه 05 بهمن 1392, 13:15 عصر
با عرض سلام و احترام
من یک صفحه لاگین درست کردم که پس از ورود کاربر،تکس باکس مربوط به لاگین غیر قابل مشاهده و نام کاربر نمایش داده بشه ولی متاسفانه پس از ورود،هیچ اتفاقی نمی افتد.بنظر می آید اطلاعاتی از دیتابیس دریافت نمیکند.(حتی خطایی هم نمایش داده نمی شود)
کدهای اچ تی ام عبارتند از :


<?php

session_start();

$u="";
$b=0;

if(isset($_SESSION["User"]))
{
$u=$_SESSION["User"];
$b=1;
}


?>


<!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>

<h1 align="center"><?php echo $u; ?></h1>

<form style="display:<?php if($b==1) echo 'none'; ?>" method="post" action="login_db.php">

<label>User :</label>
<input type="text" name="User" />
<br />
<label>Password :</label>
<input type="password" name="Pass" />
<br />
<input type="submit" value="Login" />


</form>


</body>
</html>

و کدهای پی اچ پی به قرار زیر هستند :

<?php

session_start();

$User=$_POST["User"];
$Pass=$_POST["Pass"];

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

if(!$c)
{
die(mysql_error());
}

mysql_select_db("restaurant",$c);
mysql_query('SET NAMES \'utf8\'');

$r=mysql_query("select * from users where user='$User' and pass='$Pass'");

$row=mysql_fetch_array($r);

if($row)
{
$_SESSION["User"]=$row["user"];
}

echo "<a href='login.php'>Back</a>";


?>
ممنون میشوم مرا راهنمایی نمائید.
با تشکر

keyhan.taktaz
شنبه 05 بهمن 1392, 13:32 عصر
مشکل از لاین 20 هست
بکن
mysql_fetch_assoc

engmmrj
شنبه 05 بهمن 1392, 13:36 عصر
$row=mysql_fetch_array($r); if($row){ $_SESSION["User"]=$row["user"]; }
تغییر بصورت زیر

if(mysql_num_rows($row) > 0)
{
$_SESSION["User"]=$row["user"];
}

sh.n.n786
شنبه 05 بهمن 1392, 18:38 عصر
درود و ...
از mysql_real_escape() برای جلوگیری از Injection ها استفاده کنید کدی که نوشتید آسیب پذیره.

ferry_2020
شنبه 05 بهمن 1392, 18:39 عصر
متاسفانه هیچ کدوم از راهنماییها کارساز نبود!
من میخوام وقتی کاربر روی لاگین کلیک کرد و به صفحه بعد رفت،موقعی که بک رو میزنه،دیگه تکس باکس ورود نمایش داده نشه و بجاش اسم کاربری که وارد سایت شده،نمایش داده بشه

kb0y667
یک شنبه 06 بهمن 1392, 08:50 صبح
جهت ساده نویسی و درک آسان اینطور نوشتم
و اصول امنیتی ، تخصصی رعایت نشده



<?php session_start(); ?>
<!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 if(isset($_SESSION["User"])){ ?>
<h1 align="center"><?php echo $_SESSION["User"]; ?></h1>
<?php }else{ ?>
<form method="post" action="login_db.php">
<label>User :</label>
<input type="text" name="User" /><br />
<label>Password :</label>
<input type="password" name="Pass" /><br />
<input type="submit" value="Login" />
</form>
<?php } ?>
</body>
</html>

این هم اعتبارسنجی صحیح از پایگاه داده


$row=mysql_fetch_array(mysql_query("select * from users where user=`".$User."`&&pass=`".$Pass."` limit 1;",$c));
if(!empty($row["user"])) $_SESSION["User"]=$row["user"];else unset($_SESSION["User"]);


جهت سادگی ادراک اصول تخصصی و امنیتی رعایت نشده است !!