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

مساعده في برمجة الجلسات

بدأه Muneeb3 في 16 سبتمبر 2011 · 8 رد · 733 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم آما بعد

واجهتني مشكلة في الجلسات وهي :

العضو عند تسجيل الدخول لا يحفظ id

أريد عند تسجيل الدخول يحفظ اضيا (id) اذا توافقت صحة المعلومات والاسم هذه ظابتها يحفظ الاسم والباسورد يحفظها لأنها مرسلة من صفحة (POST) بس ما خليت يرسل (id) طبعا ما راح اخلي لأني ما شفت موقع ادخل (id) ولا عايز اشوف

المطلوب: كيف اخلي يأخذ الاي دي تبع المستخدم ويحفظه.

وهذا كود صفحة معالجة التسجيل كاملاً

<?php
$host="localhost"; // المستضيف
$username="root"; // اسم مستخدم قاعدة البيانات
$password=""; //الباسورد لمستخدم قاعدة البيانات
$db_name="login"; // اسم قاعدة البيانات
$tbl_name="admin"; // الجدول

// هنا يتم الاتصال بقاعدة البيانات
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");



// هنا تعرف المدخلات كمتغيرات
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// هنا يتم تشفير الباسورد
$encrypted_mypassword=md5($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);


// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "اسم المستخدم او كلمة السر خاطئة";
}
?>

المطلوب: كيف اخلي يأخذ الاي دي تبع المستخدم ويحفظه.

وكمان شوفو لي هل الحماية ممتازة

ولو في كود معالجة التسجيل أحسن ادرجوه واشرحوه

#2
Muneeb3 كتب:

وكمان شوفو لي هل الحماية ممتازة

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

لم تقم هنا بعمل escape للقيم التي يرسلها المستخدم، وهذا يجعل الصفحة معرضة ل sql injection. استعمل mysql_real_escape_string

ال md5 hashing لا يصلح للتشفير، حتى مع وجود ال salt، حسب هذا المقال http://codahale.com/...ore-a-password/

لو راجعت ال documentation الخاص ب session_register فستجد التالي

اقتباس
If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

و register_globals ينصح دائما بتعطيلها، والاستضافات غالبا ما تعطلها

بالنسبة للباقي فحقيقة لم أفهم كلامك

3
#3

يعطيك العافية أخي العزيز الغالي..

قمت بإضافة الأي دي على الجلسات عن طريق الجلب الذي جلبته أنت ..

وقمت بحماية المدخلات التي أدخلها المستخدم وحماية قاعدة البيانات ..

<?php

session_start();
$host="localhost"; // المستضيف
$username="root"; // اسم مستخدم قاعدة البيانات
$password=""; //الباسورد لمستخدم قاعدة البيانات
$db_name="login"; // اسم قاعدة البيانات
$tbl_name="admin"; // الجدول

// هنا يتم الاتصال بقاعدة البيانات
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

//checking if the submit button is been clicked on login.php
if(isset($_POST['submit'])){
	if(trim($_POST['myusername'])!=""||trim($_POST['mypassword'])!=""){
// هنا تعرف المدخلات كمتغيرات
//and securing the variables
		$myusername=mysql_real_escape_string(strip_tags(trim($_POST['myusername'])));
		$mypassword=mysql_real_escape_string(strip_tags(trim(md5($_POST['myusername']))));



		$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
		$result=sprintf($sql);
		$result = mysql_query($sql);


// Mysql_num_row is counting table row
		$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

		if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
			while($row = mysql_fetch_assoc($sql)){
				$_SESSION['u_id'] = $row['id'];
				$_SESSION['username'] = $row['username'];
				$_SESSION['u_pass'] = $row['password'];
				header("location:login_success.php");
				echo "if You didn`t redirect <a href='login_success.php'>press Here!</a>";
			}
		}
	else {
		echo "اسم المستخدم او كلمة السر خاطئة";
	}
	}else "you didn`t type the username or the password";
}
?>

والله يوفقك ياااارب

تم تعديل هذه المشاركة بواسطة La Martir في 17 سبتمبر 2011 في 01:14

#4

أخي اضف بأول الصفحة بداية الجلسات

session_start();
#5

اعتذر عن بعض الأخطاء بالكود .. وذلك للعجلة ..وأشكر الأخ محمد للتنبيه blush.gif

وهذا التعديل ..

<?php
$host="localhost"; // المستضيف
$username="root"; // اسم مستخدم قاعدة البيانات
$password=""; //الباسورد لمستخدم قاعدة البيانات
$db_name="login"; // اسم قاعدة البيانات
$tbl_name="admin"; // الجدول

// هنا يتم الاتصال بقاعدة البيانات
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

//checking if the submit button is been clicked on login.php
if(isset($_POST['submit'])){
session_start();
	if(trim($_POST['myusername'])!=""||trim($_POST['mypassword'])!=""){
// هنا تعرف المدخلات كمتغيرات
//and securing the variables
		$myusername=mysql_real_escape_string(strip_tags(trim($_POST['myusername'])));
		$mypassword=mysql_real_escape_string(strip_tags(trim(md5($_POST['myusername']))));



		$sql="SELECT * FROM $tbl_name WHERE username='$myusername' AND password='$mypassword'";
		$result = mysql_query($sql);


// Mysql_num_row is counting table row
		$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

		if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
			while($row = mysql_fetch_assoc($result)){
				$_SESSION['u_id'] = $row['id'];
				$_SESSION['username'] = $row['username'];
				$_SESSION['u_pass'] = $row['password'];
				header("location:login_success.php");
				echo "if You didn`t redirect <a href='login_success.php'>press Here!</a>";
			}
		}
	else {
		echo "اسم المستخدم او كلمة السر خاطئة";
	}
	}else 
	echo "you didn`t type the username or the password";
}
?>

تم تعديل هذه المشاركة بواسطة La Martir في 17 سبتمبر 2011 في 05:31

#6

شكرا لك بس بقي شي هذا الكود من أجل الجلسات

$_SESSION['u_id'] = $row['id'];
     $_SESSION['username'] = $row['username'];
      $_SESSION['u_pass'] = $row['password'];

أنا جربت مثل هذا الكود من قبل لكن عندما ادمجه مع الصفحات يكون هناك أخطاء

أنظر إلى هذه الصفحة

<?

session_start();


 $title= $row['username']; 

if(!session_is_registered(myusername)){
header("location:main_login.php");
} else {

$db_name="login"; // اسم قاعدة البيانات
$tbl_name="admin"; // الجدول

// هنا يتم الاتصال بقاعدة البيانات
mysql_connect("localhost", "root", "")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
	$ea= mysql_query ("SELECT *FROM Admin ")or die("no sql"); 
$row= mysql_fetch_array($ea); 
$myusername= $row['username'];
$yack= $row['yack'];  
        echo" $myusername ";
        echo" مرحبا بك يا";
        echo"<html>
		<body><p>
	<a href='index.php'>الذهاب الى الرئيسية</a><p>
	<body\><html\>";

	}
?>

هل بأستطاعتك ظبتها على ذاك الكود الذي أعطيتني إياه:

$_SESSION['u_id'] = $row['id'];
     $_SESSION['username'] = $row['username'];
      $_SESSION['u_pass'] = $row['password'];

بدل من هذا

session_register("myusername");
session_register("mypassword");

أنا حاولت أظبته من قبل لكن لم يفلح معي هل بإمكانك مساعدتي

سؤال آخر لماذا اضفت

session_start();

في نصف الصفحة

ثانياً هذاالكود

 if(trim($_POST['myusername'])!=""||trim($_POST['mypassword'])!="")

للتأكد إذا كان المستخدم لم يدخل إسمه او الباسوورد اليس كذلك

لا فائدة له عما أظن(ارجو تنبيهي) لأن كود الصفحة كله فيه التأكد إذا كانت الجدوال متطابقة ولا يوجد لدي في قاعدة البيانات جدول فارغ

تم تعديل هذه المشاركة بواسطة Muneeb3 في 17 سبتمبر 2011 في 17:32

#7

أخي العزيز منيييييييب ..

ربي يوفقك بتصميم موقعك ..

بالنسبة لــ

session_start();

هذه للأعلان عن بدء الجلسات .

أما كيف تتحق من أن الجلسات موجودة .. فهي كلها موجودة داخل مصفوفة

$_SESSION

أما بالنسبة لكودك بهذه الطريقة ..

تستبدل هذه

if(!session_is_registered(myusername))

بهذه

if(!isset($_SESSION['username']))

وكذلك أي شيء تستبدله بنفس الإسم الذي كتبته بالمصفوفة

وعسى ربي يوفقك يااارب

أخوك لامارتير

#8

شكرا لك أخي لكن هناك أخطاء في هذا الكود

<?php
$host="localhost"; // المستضيف
$username="root"; // اسم مستخدم قاعدة البيانات
$password=""; //الباسورد لمستخدم قاعدة البيانات
$db_name="login"; // اسم قاعدة البيانات
$tbl_name="admin"; // الجدول

// هنا يتم الاتصال بقاعدة البيانات
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

//checking if the submit button is been clicked on login.php
if(isset($_POST['submit'])){
session_start();
        if(trim($_POST['myusername'])!=""||trim($_POST['mypassword'])!=""){
// هنا تعرف المدخلات كمتغيرات
//and securing the variables
                $myusername=mysql_real_escape_string(strip_tags(trim($_POST['myusername'])));
                $mypassword=mysql_real_escape_string(strip_tags(trim(md5($_POST['myusername']))));



                $sql="SELECT * FROM $tbl_name WHERE username='$myusername' AND password='$mypassword'";
                $result = mysql_query($sql);


// Mysql_num_row is counting table row
                $count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

                if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
                        while($row = mysql_fetch_assoc($result)){
                                $_SESSION['u_id'] = $row['id'];
                                $_SESSION['username'] = $row['username'];
                                $_SESSION['u_pass'] = $row['password'];
                                header("location:login_success.php");
                                echo "if You didn`t redirect <a href='login_success.php'>press Here!</a>";
                        }
                }
        else {
                echo "اسم المستخدم او كلمة السر خاطئة";
        }
        }else 
        echo "you didn`t type the username or the password";
}
?>

الذي اعطيتني اياه

حاولت أعدل فيه

2 شلت كل الحماية ما غيرت الا كود الجلسات وغيرت بالملف الثاني حق التأكدمن الجلسة ما صار الكود فيه أخطاء

أخي هل انت جربت الكود ارجو تجريبه وظبته ولك جزيل الشكر

ارجو ظبت الملفين ويكونو جاهزين لأني عدلت فيه 4 مرات و 4 فكر ماظبت شوفلي عندك أخوي

تم تعديل هذه المشاركة بواسطة Muneeb3 في 18 سبتمبر 2011 في 14:18

#9

أخي الغالي ::

هذا الكود وهو يعمل لدي ::

<?php
/*
$host="localhost"; // المستضيف
$username="root"; // اسم مستخدم قاعدة البيانات
$password=""; //الباسورد لمستخدم قاعدة البيانات
$db_name="test2"; // اسم قاعدة البيانات
$tbl_name="admin"; // الجدول
*/

define("DBHOST","localhost");
define("DBUSER","root");
define("DBPASS","");
define("DBNAME","login");

// هنا يتم الاتصال بقاعدة البيانات
mysql_connect(DBHOST, DBUSER, DBPASS)or die("cannot connect");
mysql_select_db(DBNAME)or die("cannot select DB");

session_start();
if(isset($_POST['submit'])){
//checking if the submit button is been clicked on login.php


    	if(trim($_POST['myusername'])!=""||trim($_POST['mypassword'])!=""){
// هنا تعرف المدخلات كمتغيرات
//and securing the variables
            	$myusername=mysql_real_escape_string(strip_tags(trim($_POST['myusername'])));
            	$mypassword=mysql_real_escape_string(strip_tags(trim(md5($_POST['mypassword']))));



            	$sql="SELECT * FROM admin WHERE username='$myusername' AND password='$mypassword'";
            	$result = mysql_query($sql);


// Mysql_num_row is counting table row
            	$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

            	if($count!=0){
// Register $myusername, $mypassword and redirect to file "login_success.php"
                    	while($row = mysql_fetch_assoc($result)){
                            	$_SESSION['u_id'] = $row['id'];
                            	$_SESSION['username'] = $row['username'];
                            	$_SESSION['u_pass'] = $row['password'];
                            	header("location:login_success.php");
                            	echo "if You didn`t redirect <a href='login_success.php'>press Here!</a>";
                    	}
            	}
    	else {
            	echo "wrong pass";
    	}
    	}else 
    	echo "you didn`t type the username or the password";
}
?>

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

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

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

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

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