اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم

لدي سكربت php لدخول صفحة ويب بكلمة السر  واحدة فقط

<?php

session_start();

$password = '123456';

session_start();
if (!isset($_SESSION['loggedIn'])) {$_SESSION['loggedIn'] = false;}

if (isset($_POST['password'])) {if($_POST['password'] == $password) {$_SESSION['loggedIn'] = true;}
else {die ('Incorrect password');}
}
if (!$_SESSION['loggedIn']):
?>

<html><head><title>Login</title></head><body>
<p>You need to login</p>
<form method="post">
Password: <input type="password" name="password"> <br />
<input type="submit" name="submit" value="Login">
</form></body></html>

<?php
exit();
endif;

echo '<h1> hello world ...  Logged in successfully..';
?>

والان انا اريد اضافة كثير  من كلمات السر للدخول  و ليس كلمة واحدة فقط

مثل هكذا :

$password = array('123456', 'xxxx',  '7777', '8888',  '9999');

و انا في انتظار اجابتكم .

وشكرا للجميع ..

تم التعديل في بواسطة Fikri Madrid
تصحيح كلمة

Recommended Posts

  • 1
نشر
 

لتحقيق هذا الهدف، يمكنك استخدام الدالة in_array() التي تقوم بفحص ما إذا كان عنصر محدد موجودًا في مصفوفة معينة. يمكنك استخدام هذه الدالة لفحص ما إذا كانت قيمة كلمة المرور المقدمة من المستخدم موجودة في مصفوفة كلمات المرور التي تم تعريفها.

يمكنك استخدام الكود التالي لتحقيق هذا الهدف:

<?php

session_start();

$passwords = array('123456', 'xxxx', '7777', '8888', '9999');

if (!isset($_SESSION['loggedIn'])) {
    $_SESSION['loggedIn'] = false;
}

if (isset($_POST['password'])) {
    if (in_array($_POST['password'], $passwords)) {
        $_SESSION['loggedIn'] = true;
    } else {
        die ('Incorrect password');
    }
}

if (!$_SESSION['loggedIn']):
?>

<html><head><title>Login</title></head><body>
<p>You need to login</p>
<form method="post">
Password: <input type="password" name="password"> <br />
<input type="submit" name="submit" value="Login">
</form></body></html>

<?php
exit();
endif;

echo '<h1> hello world ...  Logged in successfully..';
?>

تم تعريف المصفوفة $passwords لتحتوي علي الكلمات المرور المطلوبة للدخول. ثم تم استخدام دالة in_array() لفحص ما إذا كانت قيمة كلمة المرور المقدمة من المستخدم موجودة في هذه المصفوفة. إذا تم العثور على القيمة المطلوبة، يتم تعيين: 

$_SESSION['loggedIn']

 إلى true، وإذا لم يتم العثور على القيمة المطلوبة، يتم عرض رسالة خطأ ويتم إيقاف التشغيل.

  • 1
نشر

هناك عدة طرق وسأذكر منها طريقتين، الأولى عليك بالإعتماد على مصفوفة (Array) لتخزين مجموعة من كلمات السر.، أي تعديل السكريبت كالتالي:

<?php

session_start();

$passwords = array('123456', 'xxxx', '7777', '8888', '9999');

session_start();
if (!isset($_SESSION['loggedIn'])) {
    $_SESSION['loggedIn'] = false;
}

if (isset($_POST['password'])) {
    if (in_array($_POST['password'], $passwords)) {
        $_SESSION['loggedIn'] = true;
    } else {
        die('Incorrect password');
    }
}

if (!$_SESSION['loggedIn']):
    ?>

    <html>
    <head>
        <title>Login</title>
    </head>
    <body>
    <p>You need to login</p>
    <form method="post">
        Password: <input type="password" name="password"> <br/>
        <input type="submit" name="submit" value="Login">
    </form>
    </body>
    </html>

<?php
    exit();
endif;

echo '<h1> hello world ...  Logged in successfully..';
?>

والتعديلات هي إنشاء متغير $passwords كمصفوفة تحتوي على مجموعة من كلمات السر، ثم استخدام دالة in_array() للتحقق مما إذا كانت كلمة المرور التي تم إدخالها موجودة في المصفوفة، وإذا تم العثور على تطابق، يتم تعيين الجلسة $_SESSION['loggedIn'] إلى true، وإلا يتم عرض رسالة خطأ.

الطريقة الثانية

وهناك طريقة أخرى ألا وهي استخدام قاعدة بيانات لتخزين كلمات السر بدلاً من استخدام مصفوفة في السكريبت PHP الخاص بك، وفيما يلي مثال على كيفية تنفيذ ذلك باستخدام قاعدة بيانات MySQL:

أولاً، يجب إعداد قاعدة البيانات وجدول لتخزين كلمات السر، باستخدام أداة إدارة قاعدة البيانات مثل phpMyAdmin لإنشاء قاعدة بيانات جديدة وجدول بها.

ويجب أن يحتوي الجدول على حقلين على الأقل: id (المعرّف الرئيسي) و password (حقل لتخزين كلمات السر)، تستطيع أيضًا إضافة حقول إضافية حسب احتياجاتك، مثل اسم المستخدم أو أي معلومات إضافية.

بعد إعداد قاعدة البيانات، باستطاعتك استخدام اتصال PDO للاتصال بقاعدة البيانات واستعلام الجدول للتحقق من صحة كلمة المرور، كالتالي:

<?php

session_start();

// معلومات قاعدة البيانات
$host = 'اسم_المضيف';
$db = 'اسم_قاعدة_البيانات';
$user = 'اسم_المستخدم';
$password = 'كلمة_المرور';

// اتصال PDO بقاعدة البيانات
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $password);

if (!isset($_SESSION['loggedIn'])) {
    $_SESSION['loggedIn'] = false;
}

if (isset($_POST['password'])) {
    $enteredPassword = $_POST['password'];

    // استعلام للتحقق من صحة كلمة المرور
    $query = "SELECT COUNT(*) AS count FROM passwords WHERE password = :password";
    $statement = $pdo->prepare($query);
    $statement->bindParam(':password', $enteredPassword);
    $statement->execute();
    $result = $statement->fetch(PDO::FETCH_ASSOC);

    if ($result['count'] > 0) {
        $_SESSION['loggedIn'] = true;
    } else {
        die('Incorrect password');
    }
}

if (!$_SESSION['loggedIn']):
    ?>

    <html>
    <head>
        <title>Login</title>
    </head>
    <body>
    <p>You need to login</p>
    <form method="post">
        Password: <input type="password" name="password"> <br/>
        <input type="submit" name="submit" value="Login">
    </form>
    </body>
    </html>

<?php
    exit();
endif;

echo '<h1> hello world ...  Logged in successfully..';
?>

وتأكد من تعديل المتغيرات $host، $db، $user و $password وفقًا لمعلومات اتصال قاعدة البيانات.

والنموذج السابق يقوم بالاتصال بقاعدة البيانات باستخدام PDO ويستعلم الجدول "passwords" للتحقق من صحة كلمة المرور المدخلة، فإذا تم العثور على تطابق، يتم تعيين الجلسة $_SESSION['loggedIn'] إلى true، وإلا يتم عرض رسالة خطأ.

وبإمكانك إضافة سجلات كلمات المرور في جدول "passwords" في قاعدة البيانات، وسيتم قبول أي كلمة مرور تتطابق مع السجلات المخزنة في الجدول.

وأنصحك أن تعتمد على نمط تخزين كلمات المرور الأمن والموصى به، مثل استخدام الهاش (hash) والملح (salt)، لتوفير حماية أفضل لكلمات المرور المخزنة.

  • 1
نشر

هناك طرق أخرى أيضًا مثل:

استخدام حلقة for لفحص كل كلمة مرور:

for ($i = 0; $i < count($passwords); $i++) {
    if ($_POST['password'] == $passwords[$i]) {
        $_SESSION['loggedIn'] = true;
        break;
    }
}
  • تخزين كلمات المرور في قاعدة بيانات واستخدام استعلام SQL للتحقق من كلمة المرور.
  • استخدام تشفير كلمة المرور (مثل bcrypt) ومقارنة الهاش المشفر بدلاً من كلمة المرور نفسها.
  • استخدام دالة array_search() للبحث عن كلمة المرور المدخلة في المصفوفة $passwords، وذلك باستخدام شرط if لفحص ما إذا كانت قيمة الدالة array_search() تساوي false أو لا.
$passwords = array('123456', 'xxxx',  '7777', '8888',  '9999');

if (array_search($_POST['password'], $passwords) !== false) {
    $_SESSION['loggedIn'] = true;
} else {
    die ('Incorrect password');
}
  • استخدام دالة in_array() بشكل مباشر داخل الشرط if بدلاً من استخدام متغير، وذلك باستخدام الأقواس المستديرة في دالة in_array() بدلاً من الأقواس المربعة.
if (in_array($_POST['password'], array('123456', 'xxxx',  '7777', '8888',  '9999'))) {
    $_SESSION['loggedIn'] = true;
} else {
    die ('Incorrect password');
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...