• 0
pingo

مشكلة عند تحديث المستخدمين بكود البي اتش بي

سؤال

قمت بتصميم صفحة لتغيير كلمة المرور لمستخدم واستخدمة هذا الامر

$query="SELECT user_id FROM users WHERE ('username'='$u' and 'password'=PASSWORD('$p'))";

المشكلة هي اني لو حذفت الـباسورد وجعلت الكود بهذه الطريقة الكود تمام

$query="SELECT user_id FROM users WHERE ('username'='$u'";

ولكني احتاج الى التأكد من اسم المستخدم وكلمة المرور كلهما

واليك الكود كاملا

<html dir="rtl">

<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=windows-1256">
</head>
<?PHP
$page_title='تغيير كلمة المرور';
include('templates/header.inc');

if(isset($_POST['submit'])){
require_once('./mysql_connect.php');
function escape_data ($data){
global $Link;
if (ini_get('magic_quotes_gpc')){
$data=stripslashes($data);
}
return mysql_real_escape_string($data,$Link);
}
$message=NULL;

if(empty($_POST['username'])){
$u=FALSE;
$message .='<p>لقد نسيت كتابة اسم المستخدم</p>';
}else{
$u= escape_data($_POST['username']) ;
}
if(empty($_POST['password'])){
$p=FALSE;
$message .='<p>نسيت كتابة كلمة المرور</p>';
}else{
$p= escape_data($_POST['password']);
}
if(empty($_POST['password1'])){
$np=FALSE;
$message .='<p> لقد نسيت كتابة كلمة المرور الجديدة</p>';
}else{
if($_POST['password1']== $_POST['password2']){
$np=escape_data($_POST['password1']);
}else{
$np=FALSE;
$message .='<p>كلمتا المرور غير متطابقتان</p>';
}
}
if($u && $p && $np){
$query="SELECT user_id FROM users WHERE ('username'='$u' and 'password'=PASSWORD('$p'))";
[email protected]_query($query);
$num=mysql_num_rows($result);
if($num==1){
$row=mysql_fetch_array($result,MYSQL_NUM);

$query="UPDATE users SET password=PASSWORD('$np') WHERE user_id=$row[0]";
[email protected]_query($query);
if(mysql_affected_rows()==1){
echo'<p><b>لقد تم تغيير كلمة المرور</b></p>';
include('templates/footer.inc');
exit();
}else{
$message ='<p>لم تتم عملية تغيير كلمة المرور</p><p>'.mysql_error.'</p>';
}
}else{
$message='<p>اسم المستخدم او كلمة المرور غير صحيحة او انك لم تسجل معنا</p>';
}
mysql_close();
}else{
$message .='<p>حاول مرة اخرى</p><p>'.mysql_error().'</p>';
}
}
if(isset($message)){
echo'<font color="red">',$message,'</font>';
}

?>
<form action="<?PHP echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>ادخل معلوماتك:</legend>
<p><b>اسم المستخدم:</b><input type="text" name="username" size="20" maxlength="20" value="<?PHP if(isset($_POST['username']))
echo $_POST['username'];?>"/></p>
<p><b>كلمة المرور القديمة:</b><input type="password" name="password" size="20" maxlength="20"/></p>
<p><b>كلمة المرور الجديدة:</b><input type="password" name="password1" size="20" maxlength="20"/></p>
<p><b>تأكيد كلمة المرور:</b><input type="password" name="password2" size="20" maxlength="20"/></p>
</fieldset>
<div align="center"><input type="submit" name="submit" value="اعتماد التغيير"/></div>
</form>
<?PHP
include('templates/footer.inc');
?>


</html>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

16 إجابة على هذا السؤال .

  • 0

السلام عليكم..

هل أنت متأكد أنك تحتاج لـPASSWORD() ؟

يمكنك تشفير كلمة السر خارج MySQL، هناك md5() و sha1() و غيرهما. في آخر مشاريعي مفتوحة المصدر، أستخدم:


hash('sha256',strrev(md5($text)));

أراها سهلة و قصيرة، و سريعة، ربما تحل مشكلتك. أي التشفير خارج الاستعلام، في كود PHP.

علمًا بأن كلمات السر المخزنة سابقًا ستحتاج لنفس الطريقة، حتى تعمل، و إلا ستصبح دون أي قيمة!

أعتقد، و الله أعلم، أن PASSWORD() مطابقة لـmd5() فقط. و لكني لست متأكدًا.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا على ردك وبارك الله فيك

لكن ممكن تشرح لى الكود لاني مبتدئ في البي اتش بي. واكون شاكر لك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم، فكرة الكود بسيطة. بعض الاصدارات من MySQL - إن كنت أتذكر بالشكل الصحيح - لا تدعم PASSWORD() لتشفير كلمات السر.

فبدلاً من الاعتماد على نظام قواعد البيانات في تشفير كلمات السر نفعل الآتي لتشفير كلمات السر بشكل بديل، و عادةً أفضل:


$_POST['password']=hash('sha256',strrev(md5($_POST['password'])));
$_POST['password1']=hash('sha256',strrev(md5($_POST['password1'])));

أتمنى أن استطعت إيصال الفكرة. و أن تحل هذه الفكرة المشكلة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام

اولا اشكرك لطول صبرك علي .طيب انا عدلت على الكود تبعي فهل هذه الصيغيى اللى انا كاتبها صحيحة ولا لا

$query="SELECT user_id FROM users WHERE (username='$u') and password=hash('sha256',strrev(md5($_POST['$p'])));";

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أتمنى أن تعمل هكذا:


$p=hash('sha256',strrev(md5($p)));
$query="SELECT user_id FROM users WHERE username='$u' and password='$p'";

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

نفس المشكلة .وضعت الكود اللى اعطيتني هو في ملقف التسجيل وسجلت به عدة مستخدمين وكل شئ تمام .

ولكن لما وضعته في ملف تعديل الباسورد لم يعمل شوف الكود التالى هكذا وضعته:

if($u && $p && $np){
$p=hash('sha256',strrev(md5($p)));
$query="SELECT user_id FROM users WHERE username='$u' and password='$p'";

// $query="SELECT user_id FROM users WHERE (username='$u') and (password=password('$p'))";
[email protected]_query($query);
$num=mysql_num_rows($result);
if($num==1){
$row=mysql_fetch_array($result,MYSQL_NUM);

$query="UPDATE users SET password=PASSWORD('$np') WHERE user_id=$row[0]";
[email protected]_query($query);
if(mysql_affected_rows()==1){
echo'<p><b>لقد تم تغيير كلمة المرور</b></p>';
include('templates/footer.inc');
exit();
}else{
$message ='<p>لم تتم عملية تغيير كلمة المرور</p><p>'.mysql_error.'</p>';
}
}else{
$message='<p>اسم المستخدم او كلمة المرور غير صحيحة او انك لم تسجل معنا</p>';
}
mysql_close();
}else{
$message .='<p>حاول مرة اخرى</p><p>'.mysql_error().'</p>';
}
}
if(isset($message)){
echo'<font color="red">',$message,'</font>';
}

تم تعديل بواسطه pingo
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بسيطة جدًا إن شاء الله، حول الكود إلى التالي:


if($u && $p && $np){
$p=hash('sha256',strrev(md5($p)));
$np=hash('sha256',strrev(md5($np)));
$query="SELECT user_id FROM users WHERE username='$u' and password='$p'";

// $query="SELECT user_id FROM users WHERE (username='$u') and (password=password('$p'))";
[email protected]_query($query);
$num=mysql_num_rows($result);
if($num==1){
$row=mysql_fetch_array($result);

$query="UPDATE users SET password='$np' WHERE user_id=".$row['user_id'];
[email protected]_query($query);
if(mysql_affected_rows()){
echo'<p><b>لقد تم تغيير كلمة المرور</b></p>';
include('templates/footer.inc');
exit();
}else{
$message ='<p>لم تتم عملية تغيير كلمة المرور</p><p>'.mysql_error.'</p>';
}
}else{
$message='<p>اسم المستخدم او كلمة المرور غير صحيحة او انك لم تسجل معنا</p>';
}
mysql_close();
}else{
$message .='<p>حاول مرة اخرى</p><p>'.mysql_error().'</p>';
}
}
if(isset($message)){
echo'<font color="red">',$message,'</font>';
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

والله تعبتك معايا.. ولكن الكود لم يعمل..واليك الكود كامل بعد التعديل

<html dir="rtl">

<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=windows-1256">
</head>
<?PHP
$page_title='تغيير كلمة المرور';
include('templates/header.inc');

if(isset($_POST['submit'])){
require_once('./mysql_connect.php');
function escape_data ($data){
global $Link;
if (ini_get('magic_quotes_gpc')){
$data=stripslashes($data);
}
return mysql_real_escape_string($data,$Link);
}
$message=NULL;

if(empty($_POST['username'])){
$u=FALSE;
$message .='<p>لقد نسيت كتابة اسم المستخدم</p>';
}else{
$u= escape_data($_POST['username']) ;
}
if(empty($_POST['password'])){
$p=FALSE;
$message .='<p>نسيت كتابة كلمة المرور</p>';
}else{
$p=escape_data($_POST['password']);
}
if(empty($_POST['password1'])){
$np=FALSE;
$message .='<p> لقد نسيت كتابة كلمة المرور الجديدة</p>';
}else{
if($_POST['password1']== $_POST['password2']){
$np=escape_data($_POST['password1']);
}else{
$np=FALSE;
$message .='<p>كلمتا المرور غير متطابقتان</p>';
}
}
if($u && $p && $np){
$p=hash('sha256',strrev(md5($p)));
$np=hash('sha256',strrev(md5($np)));
$query="SELECT user_id FROM users WHERE username='$u' and password='$p'";
// $query="SELECT user_id FROM users WHERE (username='$u') and (password=password('$p'))";
[email protected]_query($query);
$num=mysql_num_rows($result);
if($num==1){
$row=mysql_fetch_array($result,MYSQL_NUM);

$query="UPDATE users SET password='$np' WHERE user_id=$row[0]";
[email protected]_query($query);
if(mysql_affected_rows()==1){
echo'<p><b>لقد تم تغيير كلمة المرور</b></p>';
include('templates/footer.inc');
exit();
}else{
$message ='<p>لم تتم عملية تغيير كلمة المرور</p><p>'.mysql_error.'</p>';
}
}else{
$message='<p>اسم المستخدم او كلمة المرور غير صحيحة او انك لم تسجل معنا</p>';
}
mysql_close();
}else{
$message .='<p>حاول مرة اخرى</p><p>'.mysql_error().'</p>';
}
}
if(isset($message)){
echo'<font color="red">',$message,'</font>';
}

?>
<form action="<?PHP echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>ادخل معلوماتك:</legend>
<p><b>اسم المستخدم:</b><input type="text" name="username" size="20" maxlength="20" value="<?PHP if(isset($_POST['username']))
echo $_POST['username'];?>"/></p>
<p><b>كلمة المرور القديمة:</b><input type="password" name="password" size="20" maxlength="20"/></p>
<p><b>كلمة المرور الجديدة:</b><input type="password" name="password1" size="20" maxlength="20"/></p>
<p><b>تأكيد كلمة المرور:</b><input type="password" name="password2" size="20" maxlength="20"/></p>
</fieldset>
<div align="center"><input type="submit" name="submit" value="اعتماد التغيير"/></div>
</form>
<?PHP
include('templates/footer.inc');
?>


</html>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم..

جيد، إلى هذه المرحلة، لا أستطيع أن أحدد المشكلة.

البرمجة - على الأقل لغير المحترفين مثلي - تحتاج دائمًا إلى التجربة للـdebuging لنزع الأخطاء. و بما أن هذه قاعدة بيانات، فالتجربة صعبة، و تحتاج للكثير من الأشياء.

اعذرني، لم أستطع فعلاً إيجاد حل للمشكلة. لم أستطع إيجادها أصلاً.

سؤال بسيط و مهم للغاية: ماذا تقصد بــ"لم يعمل الكود"؟ يعني ظهرت صفحة بيضاء فارغة؟ أي أنه - تقريبًا - هناك خطأ تم منع ظهوره، و في هذه الحالة نكون توصلنا لنقطة هامة للغاية.

إذا كان عمل، لكن ليس بالشكل المطلوب، أي خطأ ظهر لك؟ مثلاً: "لم تتم عملية تغيير كلمة المرور" أو غيرها.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا على ردك

اقصد ان الكود لم يعمل

اقصد به الرسالة التالية تظهر

<p>اسم المستخدم او كلمة المرور غير صحيحة او انك لم تسجل معنا</p>

وهى التي تظهر عند عدم عمل :

if($num==1)

بفعل التابع

$num=mysql_num_rows($result)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جيد..

كما أخبرتك التشفير الجديد مختلف عن التشفير القديم، لذا كل كلمات السر الموجودة من قبل (((لن تعمل))) مع الكود الحالي!

يجب أن يكون التشفير الموجود في التسجيل و تسجيل الدخول هو نفس التشفير الموجود في تغيير كلمة المرور. هل الأمر كذلك؟

أقصد:


$p=hash('sha256',strrev(md5($p)));

يجب أن تشفر كل كلمات السر، في ملفات المشروع (مثل التسجيل و تسجيل الدخول مثلاً) بهذه الطريقة.

ملحوظة هامة: كل كلمات السر المشفرة قبل هذا التعديل - لن تعمل!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سيدي الفاضل

انا عدلت فورمة التسجيل والانتساب وادخلت عدد لا بأس به من المستخدمين بالصيغة اللى اعطيتني هى

ولكن في مورمة تغيير كلمة السر و عند تغيير كلمات السر للمستخدمين الجدد اللى ادخلتهم بعد التعديل لا تعمل وتظهر الرسالة التي ذكرتها لك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم، جرب هذا الكود أولاً دون تعديله.

هناك ملاحظة باللغة العربية في الكود، حاول إذا استطعت تنفيذها..

الكود:


<html dir="rtl">

<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=windows-1256">
</head>
<?PHP
$page_title='تغيير كلمة المرور';
include('templates/header.inc');

if(isset($_POST['submit'])){
require_once('./mysql_connect.php');
function escape_data ($data){
global $Link;
if (ini_get('magic_quotes_gpc')){
$data=stripslashes($data);
}
return mysql_real_escape_string($data,$Link);
}
$message=NULL;

if(empty($_POST['username'])){
$u=FALSE;
$message .='<p>لقد نسيت كتابة اسم المستخدم</p>';
}else{
$u= escape_data($_POST['username']) ;
}
if(empty($_POST['password'])){
$p=FALSE;
$message .='<p>نسيت كتابة كلمة المرور</p>';
}else{
$p=escape_data($_POST['password']);
}
if(empty($_POST['password1'])){
$np=FALSE;
$message .='<p> لقد نسيت كتابة كلمة المرور الجديدة</p>';
}else{
if($_POST['password1']== $_POST['password2']){
$np=escape_data($_POST['password1']);
}else{
$np=FALSE;
$message .='<p>كلمتا المرور غير متطابقتان</p>';
}
}
if($u && $p && $np){
$p=hash('sha256',strrev(md5($p)));
$np=hash('sha256',strrev(md5($np)));
$query="SELECT user_id FROM users WHERE username='$u' and password='$p'"; // استبدل هذا السطر، بالسطر المشابه له الموجود في تسجيل الدخول
// $query="SELECT user_id FROM users WHERE (username='$u') and (password=password('$p'))";
$result=mysql_query($query);
$num=mysql_num_rows($result);
if($num){
$row=mysql_fetch_array($result,MYSQL_NUM);

$query="UPDATE users SET password='$np' WHERE user_id=$row[0]";
$result=mysql_query($query);
if(mysql_affected_rows()){
echo'<p><b>لقد تم تغيير كلمة المرور</b></p>';
include('templates/footer.inc');
exit();
}else{
$message ='<p>لم تتم عملية تغيير كلمة المرور</p><p>'.mysql_error.'</p>';
}
}else{
$message='<p>اسم المستخدم او كلمة المرور غير صحيحة او انك لم تسجل معنا</p>';
}
mysql_close();
}else{
$message .='<p>حاول مرة اخرى</p><p>'.mysql_error().'</p>';
}
}
if(isset($message)){
echo'<font color="red">',$message,'</font>';
}

?>
<form action="<?PHP echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>ادخل معلوماتك:</legend>
<p><b>اسم المستخدم:</b><input type="text" name="username" size="20" maxlength="20" value="<?PHP if(isset($_POST['username']))
echo $_POST['username'];?>"/></p>
<p><b>كلمة المرور القديمة:</b><input type="password" name="password" size="20" maxlength="20"/></p>
<p><b>كلمة المرور الجديدة:</b><input type="password" name="password1" size="20" maxlength="20"/></p>
<p><b>تأكيد كلمة المرور:</b><input type="password" name="password2" size="20" maxlength="20"/></p>
</fieldset>
<div align="center"><input type="submit" name="submit" value="اعتماد التغيير"/></div>
</form>
<?PHP
include('templates/footer.inc');
?>


</html>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام

يا صاحبي تعبتك معايا بس لا تتركني الله يخليك مشيت معايا مسافة جزاك الله خير

ما عرفت فين اضع الكود في ملف التسجيل لذلك ارفقت لك الملفين ملف التسجيل وملف تعديل الباسورد وقد قمت بعمل التعديلات التي اقترحتها ولكن حسب فهمي فظهرت لي

<p>كلمتا المرور غير متطابقتان</>

Desktop.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم،

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

في رأيي، حاول أن تجد المشكلة، و إلا حاول كتابة الملف الذي فيه مشكلة مرة أخرى، دون النسخ من الملف القديم قدر الامكان. و لا تنسى ان تحتفظ بكل كل شيء، حتى إذا ما أردت العودة لنسخة قديمة أفضل، استطعت!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك على كل حال

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .