الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكله في كود السيشن لا ينتقل بين الصفحات

بدأه danteeliquid في 4 أغسطس 2012 · 3 رد · 622 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قمت بانشاء فورم تسجيل دخول و استخدمت فيها السيشن لكن عند تنفيذ الكود لا يعمل معي يقوم باعادتي لنفس الصفحة وكانه لا يرى الشرط الموجود قمت بمتابعة درس على اليوتوب ونفذت نفس الخطوات في الدرس وانشاء نفس المسميات ونفس قاعدة البيانات لكن ما زالت المشكلة مستمرة لا يتم تنفيذ اي شي سواء ادخلت اسم مستخدم وكلمة مرور صحيحة او خاظئة

هذا هو الكود

<?php
session_start();

$host="localhost"; 
$username="root"; 
$password=""; 
$db_name="rememberme"; 


mysql_connect("$host","$username","$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");


if ($_POST['login'])
{
$username= $_POST['username'];
$password= $_POST['password'];
$remember= $_POST['remember'];

if ($username&&$password)
   {
      $login = mysql_query("SELECT * FROM users WHERE username='username'");
	  while($row = mysql_fetch_assoc($login))
	  {
	         $db_password = $row['password'];
			 if(md5($password) == $db_password)
			     $loginok = TRUE ; 
			 else
			     $loginok = FALSE;

			 if ( $loginok ==TRUE)
			 {
			    if($remember == "on")
				setcookie("username" , $username , time()+7200);
				else if ($remember == "" )
				$_SESSION['username'] = $username;

				header("Location: userarea.php");
				exit();

			 }
			 else
			 {
			    die("incorrect username or password");
			 }
	  }
   }
   else
   {
    die("plese enter a user name and password");
    }
}

?>

<html>
<head>
</head>
<body>
<form action ="login.php" method="POST">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="checkbox" name="remember" />
<input type="submit" name="login" value="log in" />
</form>

</form>
</body>
</html>

ارجو مساعدتي وتوضيح سبب الخلل اين هو مع العلم اني استخدم برنامج xsmpp لانشاء القاعدة والسيرفر

و شكرا

تم تعديل هذه المشاركة بواسطة danteeliquid في 4 أغسطس 2012 في 09:59

#2

جرب هذا، للعلم لم أقم باختباره على السيرفر المحلي

قمت بتصحيح بعض الأخطاء البرمجية، والإملائية إن جاز التعبير.. في مكان قمت بوضع $$ بدلاً من $ واحدة، وهذه لها معنى مختلف.. وفي مكان آخر أنقصت الـ $ (في الاستعلام)..

إلخ

أيضاً عندما تود استقبال قيمة من المستخدم فتأكد دوماً من التسلسل: isset() > !empty > value = xyz

عند فشل أي شرط من الشروط لن يتم فحص الباقي وهذا التسلسل الصحيح لأنك مثلاً بدون isset قد تقوم بالمقارنة مع null ويظهر لديك خطأ.

نسيت وضع value=on للـ checkbox. بدونها فالقيمة التي تقارن معها خاطئة، وطبعاً عندما لا يتم وضعه checked فلن يتم إرساله ضمن الـ form أساساً بالتالي فـ isset() ستعيد false وتنتقل إلى تخزين session var جديد.

<?php
session_start();

$host="localhost"; 
$username="root"; 
$password=""; 
$db_name="rememberme"; 


mysql_connect("$host","$username","$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");


if (isset($_POST['login']) && !empty($_POST['login'])) {
	$username= $_POST['username'];
	$password= $_POST['password'];
	$remember= $_POST['remember'];

	if (isset($username) && !empty($username) && isset($password) && !empty($password)) {
		$login = mysql_query("SELECT * FROM users WHERE username='$username'");
		if (mysql_num_rows($login) == 1)
		{
			while($row = mysql_fetch_assoc($login))
			{
				$db_password = $row['password'];
				if(md5($password) == $db_password)
					$loginok = TRUE; 
				else
					$loginok = FALSE;

				if ($loginok === TRUE) {
					if($isset($remember) && !empty($remember) && $remember == "on")
						setcookie("username" , $username , time()+7200);
					else //if ($remember == "" )
						$_SESSION['username'] = $username;

					header("Location: userarea.php");
					exit();
				}
			}
		}
		// ستصل هنا في حال تم إدخال اسم مستخدم خاطئ أو كانت كلمة المرور خاطئة، لذا لا داعي لتكون الرسالة مكررة مع الشروط
		die("incorrect username or password");
	} else {
		echo "plese enter a user name and password";
	}
}

?>

<html>
<head>
</head>
<body>
<form action="login.php" method="POST">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="checkbox" name="remember" value="on" />
<input type="submit" name="login" value="log in" />
</form>

</form>
</body>
</html>

اقرأه بهدوء. يمكن تحسينه أكثر لكني فضلت عدم التعديل عليه بشكل كبير بما أنك جديد على PHP.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

شكرا جزيلا على مساعدتك افادني فعلا

لكن اريد ان استفسر اكثر عن ماذا يمكنني اضافته على هذا الكود لاجعله اكثر امانا اذا سمحت

شكرا لمساعدتك

#4
danteeliquid كتب:

لكن اريد ان استفسر اكثر عن ماذا يمكنني اضافته على هذا الكود لاجعله اكثر امانا اذا سمحت

الكود المذكور تقريباً لا يحمل أي مشكلة أمنية إلا ... السماح بـ SQL injection

لتفادي SQLi انسى mysql في PHP واستخدم mysqli أو PDO

انظر المشاركة رقم 3 (النصيحة الثالثة) لمزيد من المعلومات في هذا الموضوع الذي كتبته في أحد المواقع

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…