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

تغيير كلمة المرور

بدأه menams3 في 9 نوفمبر 2012 · 6 رد · 880 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اريد عمل صفحة للاعضاء تمكنهم من تغيير كلمة المرور الخاصة بهم

الصفحة عبارة عن ادخال كلمة المرور القديمة ثم الجديدة وعنده الضغط علي زر التأكيد

لا يتم التعديل الا اذا كانت كلمة المرور القديمة مطابقة للتي في قاعدة البيانات

#2

اخي الرجاء اضافة المزيد من المعلومات وارفاق كود ال php وبنية قاعدة البيانات لان السؤال غير مكتمل.

#3
linux web man كتب:

اخي الرجاء اضافة المزيد من المعلومات وارفاق كود ال php وبنية قاعدة البيانات لان السؤال غير مكتمل.

هذا هو الكود كامل

مع محاولات التعديل

<?php require_once('../Connections/conn.php'); ?>
<?php
if (!isset($_SESSION)) {
  session_start();
// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
  // For security, start by assuming the visitor is NOT authorized. 
  $isValid = False; 

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  if (!empty($UserName)) { 
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
      $isValid = true; 
    } 
    // Or, you may restrict access to only certain users based on their username. 
    if (in_array($UserGroup, $arrGroups)) { 
      $isValid = true; 
    } 
    if (($strUsers == "") && false) { 
      $isValid = true; 
    } 
  } 
  return $isValid; 
}

$MM_restrictGoTo = "fail.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
  $MM_referrer .= "?" . $QUERY_STRING;
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo); 
  exit;
}
$username=$_SESSION['MM_Username'];
$old = $row_Recordset1['password'];
$oldt = $_POST['old'];
?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}


if ($row_Recordset1['password'] == $_POST['old'] ) {
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s",
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['mobile'], "text"),
                       GetSQLValueString($_POST['name'], "text"));

  mysql_select_db($database_conn, $conn);
  $Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());
}

mysql_select_db($database_conn, $conn);
$query_Recordset1 = "SELECT * FROM users WHERE name = '$username'";
$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
	} else {
echo 'كلمة المرور القديمة خطأ';
}
?>




<!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=windows-1256" />
<title>الادارة</title>
<style type="text/css">
<!--
body {
	background-image: url(../img/BG5.JPG);
}
-->
</style>
</head>

<body>
<div align="center">
  <p><strong>تعديل كلمة المرور </strong></p>
  <p><?php echo $username; ?></p>
</div>
<p><?php echo $row_Recordset1['password']; ?></p>

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">الاسم:</td>
      <td><?php echo $row_Recordset1['name']; ?></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">كلمة المرور القديمة </td>
      <td><label>
        <input name="old" type="password" size="32" />
      </label></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">كلمة المرور الجديد </td>
      <td><input name="password" type="password" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">رقم الموبايل :</td>
      <td><input type="text" name="mobile" value="<?php echo $row_Recordset1['mobile']; ?>" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right"> </td>
      <td><input type="submit" value="تعديل"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_update" value="form1">
  <input type="hidden" name="name" value="<?php echo $row_Recordset1['name']; ?>">
</form>
<p> </p>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
#4
linux web man كتب:

اخي الرجاء اضافة المزيد من المعلومات وارفاق كود ال php وبنية قاعدة البيانات لان السؤال غير مكتمل.

هذا هو الكود كامل

مع محاولات التعديل

<?php require_once('../Connections/conn.php'); ?>
<?php
if (!isset($_SESSION)) {
  session_start();
// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
  // For security, start by assuming the visitor is NOT authorized. 
  $isValid = False; 

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  if (!empty($UserName)) { 
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
      $isValid = true; 
    } 
    // Or, you may restrict access to only certain users based on their username. 
    if (in_array($UserGroup, $arrGroups)) { 
      $isValid = true; 
    } 
    if (($strUsers == "") && false) { 
      $isValid = true; 
    } 
  } 
  return $isValid; 
}

$MM_restrictGoTo = "fail.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
  $MM_referrer .= "?" . $QUERY_STRING;
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo); 
  exit;
}
$username=$_SESSION['MM_Username'];
$old = $row_Recordset1['password'];
$oldt = $_POST['old'];
?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}


if ($row_Recordset1['password'] == $_POST['old'] ) {
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s",
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['mobile'], "text"),
                       GetSQLValueString($_POST['name'], "text"));

  mysql_select_db($database_conn, $conn);
  $Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());
}

mysql_select_db($database_conn, $conn);
$query_Recordset1 = "SELECT * FROM users WHERE name = '$username'";
$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
	} else {
echo 'كلمة المرور القديمة خطأ';
}
?>




<!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=windows-1256" />
<title>الادارة</title>
<style type="text/css">
<!--
body {
	background-image: url(../img/BG5.JPG);
}
-->
</style>
</head>

<body>
<div align="center">
  <p><strong>تعديل كلمة المرور </strong></p>
  <p><?php echo $username; ?></p>
</div>
<p><?php echo $row_Recordset1['password']; ?></p>

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">الاسم:</td>
      <td><?php echo $row_Recordset1['name']; ?></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">كلمة المرور القديمة </td>
      <td><label>
        <input name="old" type="password" size="32" />
      </label></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">كلمة المرور الجديد </td>
      <td><input name="password" type="password" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">رقم الموبايل :</td>
      <td><input type="text" name="mobile" value="<?php echo $row_Recordset1['mobile']; ?>" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right"> </td>
      <td><input type="submit" value="تعديل"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_update" value="form1">
  <input type="hidden" name="name" value="<?php echo $row_Recordset1['name']; ?>">
</form>
<p> </p>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
#5

اخي هل تقوم بتشفير كلمة المرور قبل تخزينها في السيرفر اذا كان كذالك لماذا لا تستخدم دالة التشفير في السطر

  $updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s",
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['mobile'], "text"),
                       GetSQLValueString($_POST['name'], "text"));

الرجاء توضيح هذه النقطة فاذا كنت تستخدم الدالة md5 فيحب استبدال

if ($row_Recordset1['password'] == $_POST['old'])

بـ

	if ($row_Recordset1['password'] == md5($_POST['old']))

اعتقد ايضا انك قمت بتعديل السطور :

if ($row_Recordset1['password'] == $_POST['old'] ) {
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s",
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['mobile'], "text"),
                       GetSQLValueString($_POST['name'], "text"));

  mysql_select_db($database_conn, $conn);
  $Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());
}

mysql_select_db($database_conn, $conn);
$query_Recordset1 = "SELECT * FROM users WHERE name = '$username'";
$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
        } else {
echo 'كلمة المرور القديمة خطأ';
}

فيوجد فيها بعض الاشكاليات مثلا المتغير

$totalRows_Recordset1

لم يتم استخدامه في السكربت ابدا

ايضا تم تغير ترتيب الاسطر فيه حيث تم استخدام

$row_Recordset1['password']

قبل السطر

$row_Recordset1 = mysql_fetch_assoc($Recordset1);

فلا تكون هناك قيمة لكلمة المرور

اقترح ان تستبدله بالكود

	mysql_select_db($database_conn, $conn);
	$query_Recordset1 = "SELECT * FROM users WHERE name = '$username'";
	$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
	$row_Recordset1 = mysql_fetch_assoc($Recordset1);
	if ($row_Recordset1['password'] == $_POST['old']) {
		$editFormAction = $_SERVER['PHP_SELF'];
		if (isset($_SERVER['QUERY_STRING'])) {
			$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
		}
		if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
			$updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s", GetSQLValueString($_POST['password'], "text"), GetSQLValueString($_POST['mobile'], "text"), GetSQLValueString($_POST['name'], "text"));

			mysql_select_db($database_conn, $conn);
			$Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());
		}


	} else {
		echo 'كلمة المرور القديمة خطأ';
	}

ايضا المتغير $Result1 ليس له استخدام

اتمنى ان تحل مشكلتك

تم تعديل هذه المشاركة بواسطة linux web man في 9 نوفمبر 2012 في 01:18

1
#6
linux web man كتب:

اخي هل تقوم بتشفير كلمة المرور قبل تخزينها في السيرفر اذا كان كذالك لماذا لا تستخدم دالة التشفير في السطر

  $updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s",
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['mobile'], "text"),
                       GetSQLValueString($_POST['name'], "text"));

الرجاء توضيح هذه النقطة فاذا كنت تستخدم الدالة md5 فيحب استبدال

if ($row_Recordset1['password'] == $_POST['old'])

بـ

	if ($row_Recordset1['password'] == md5($_POST['old']))

اعتقد ايضا انك قمت بتعديل السطور :

if ($row_Recordset1['password'] == $_POST['old'] ) {
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s",
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['mobile'], "text"),
                       GetSQLValueString($_POST['name'], "text"));

  mysql_select_db($database_conn, $conn);
  $Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());
}

mysql_select_db($database_conn, $conn);
$query_Recordset1 = "SELECT * FROM users WHERE name = '$username'";
$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
        } else {
echo 'كلمة المرور القديمة خطأ';
}

فيوجد فيها بعض الاشكاليات مثلا المتغير

$totalRows_Recordset1

لم يتم استخدامه في السكربت ابدا

ايضا تم تغير ترتيب الاسطر فيه حيث تم استخدام

$row_Recordset1['password']

قبل السطر

$row_Recordset1 = mysql_fetch_assoc($Recordset1);

فلا تكون هناك قيمة لكلمة المرور

اقترح ان تستبدله بالكود

	mysql_select_db($database_conn, $conn);
	$query_Recordset1 = "SELECT * FROM users WHERE name = '$username'";
	$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
	$row_Recordset1 = mysql_fetch_assoc($Recordset1);
	if ($row_Recordset1['password'] == $_POST['old']) {
		$editFormAction = $_SERVER['PHP_SELF'];
		if (isset($_SERVER['QUERY_STRING'])) {
			$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
		}
		if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
			$updateSQL = sprintf("UPDATE users SET password=%s, mobile=%s WHERE name=%s", GetSQLValueString($_POST['password'], "text"), GetSQLValueString($_POST['mobile'], "text"), GetSQLValueString($_POST['name'], "text"));

			mysql_select_db($database_conn, $conn);
			$Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());
		}


	} else {
		echo 'كلمة المرور القديمة خطأ';
	}

ايضا المتغير $Result1 ليس له استخدام

اتمنى ان تحل مشكلتك

شكرا جزيلا اخي لكن المشكلة مازالت حيث انه لو ادخلت اي قيمة في خانة كلمة المرور القديمة فانه يسمح بتغيير كلمة المرور

لكن اريد ان اعلمك اخي اني مبتدئ في php

ولدي بعض الاستفسارات

اولا اريد ان اعرف اكثر عن نظام التشفير وفائدته

ثانيا كلمة" كلمة المرور القديمة خطأ" ظاهرة دائما في الصفحة

ارجو الا اكون متعب لك

زشكرا جزيلا

تم تعديل هذه المشاركة بواسطة menams3 في 9 نوفمبر 2012 في 03:13

#7

اخي بشكل مبسط عندما نخزن كلمة مرور في قاعدة البيانات فنقوم بـ "تشفيرها" لحماية كلمات مرور المستخدمين اذا تعرضت قاعدة بيانات للاختراق مثلا اذا كانت كلمة المرور تساوي 'password' فعند تشفيرها بشفرة MD5 تتحول الى

'5f4dcc3b5aa765d61d8327deb882cf99' و هذا النوع من التشفير لا يمكن اعادة الكلمة أو الجملة المشفرة الى حالتها الأصلية اي ان التشفير يكون بجهة واحدة فقط.

لاستخدامها في ال php :

<?php
$password = 'password';
echo md5($password);
?>

او بطريقة مباشرة :

echo md5('password');

واذا ارت التحقق من قيمة كلمة المرور تقوم بتشفير الباسوورد التي ادخلها المستخدم ومن ثم تقارنها مع القيمة المخزنة في قاعدة البيانات.

بالنسبة الى الكود ارجو ارفاق 'تخطيط' قاعدة البيانات مع الملف conn.php

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