Ahmed Alhamdany نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 ما هو سبب ظهور الخطأ التالي : Notice: Trying to access array offset on value of type bool in عند استعمال الكود التالي if($user == $row['username_users']){ echo "hello"; } اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 يبدو أن سبب المشكلة هي أن متغير $row ليس مصفوفة Array لكن قيمته bool أي إما True أو False. غالبًا ستكون قيمة $row هي False، لذالك لا تستطيع أخد الخاصية username_users من المتغير. يمكنك كتابة الكود التالي لحل المشكلة: if( is_array($row) && ($user == $row['username_users'])){ echo "hello"; } في هذه الشيفرة قمنا بالتأكد من أن متغير $row هو عبارة عن مصفوفة، قبل التحقق من تواجد الخاصية username_users ومقارنة قيمتها مع $user. 1 اقتباس
0 Ahmed Alhamdany نشر 14 أغسطس 2020 الكاتب أرسل تقرير نشر 14 أغسطس 2020 نفس المشكلة حبي تم ارفاق ملف الكود login.php اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 49 دقائق مضت قال Ahmed Alhamdany: تم ارفاق ملف الكود صراحة لم أفهم الفكرة التي تشتغل عليها، فهمت الجزء الأول منها لكني لم أفهم الشرط الثاني. if ($count > 0) { // تقوم بتسجيل البيانات ثم تقوم بالإنتقال لإحدى الصفحات على حسب نوع المستخدم } else { // هذا المستخدم غير موجود أي لا نستطيع أخد قيمة خاصية // username_users منه // يعني يجب عرض رسالة الخطأ مباشرة } 1 اقتباس
0 Ahmed Alhamdany نشر 14 أغسطس 2020 الكاتب أرسل تقرير نشر 14 أغسطس 2020 المقصود هنا اذا البيانات القادمة من البوست لا تطابق البيانات الموجوده في قاعدة البيانات سوف ننفذ شرط بعد else اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 31 دقائق مضت قال Ahmed Alhamdany: المقصود هنا اذا البيانات القادمة من البوست لا تطابق البيانات الموجوده في قاعدة البيانات سوف ننفذ شرط بعد else أنت في البداية، ذهبت لقاعدة البيانات وقمت بطلب المستخدم الذي لديه إسم مستخدم وكلمة سر معينة. إذن في حالة كانت هناك مستخدم بهذه المعلومات، سنقوم بالدخول للشرط الأول، وفي حالة لم يكن المستخدم موجودًا فمباشرة سنقوم بعرض رسالة الخطأ. لن نحتاج لإعادة إختبار هل المعلومات مطابقة أو لا، لأنها خاطئة بالفعل، ولا يوجد أي مستخدم بهذه المعلومات. 1 اقتباس
0 Ahmed Alhamdany نشر 14 أغسطس 2020 الكاتب أرسل تقرير نشر 14 أغسطس 2020 شكرا الك اخي على الشرح لكن الصراحة لم افهم ما هو قصدك اني بعثت لحضرتك الملف السابق المطلوب اذا اليوزر صحيح والباسوورد خطا نضهر رساله خطا واذا اليوزر والباسوورد خطا نضهر رساله خطا اخرى وهكذا ؟ اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 بتاريخ الآن قال Ahmed Alhamdany: المطلوب اذا اليوزر صحيح والباسوورد خطا نضهر رساله خطا، واذا اليوزر والباسوورد خطا نضهر رساله خطا اخرى لو ممكن تقوم بإرفاق ملف int.php. 1 اقتباس
0 Ahmed Alhamdany نشر 14 أغسطس 2020 الكاتب أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 1 دقيقة مضت قال محمد ربيع زليول: لو ممكن تقوم بإرفاق ملف int.php. ليس له علاقه بالخلل int.php يحتوي على الهيدر وباقي تفاصيل التصميم الخلل واضح ستاذ في السطر الذي تم اشارته اليه سابقا اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 1 دقيقة مضت قال Ahmed Alhamdany: ليس له علاقه بالخلل int.php أعلم، أريد فقط سطر الكود، الذي تقوم به بإدخال معلومات الإتصال بقاعدة البيانات ( إسم المستخدم، كلمة السر، إسم قاعدة البيانات، ..) 1 اقتباس
0 Ahmed Alhamdany نشر 14 أغسطس 2020 الكاتب أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 5 ساعات قال محمد ربيع زليول: أعلم، أريد فقط سطر الكود، الذي تقوم به بإدخال معلومات الإتصال بقاعدة البيانات ( إسم المستخدم، كلمة السر، إسم قاعدة البيانات، ..) <?php // يمكن استخدام الاوامر ادناه لجميع السكربتات التي تطلب اتصال بقاعدة بيانات $dsn = 'mysql:host=localhost;dbname=tours'; // اسم السيرفر + اسم القاعدة $user = 'root'; // يوزر القاعدة $pass = ''; // الباسوورد $option = array ( PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8', // لجعل الجميع بهذا الاسم يقره عربي ); try { // الاتصال بالقاعدة $con = new PDO($dsn ,$user,$pass,$option); $con->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ // في حالة لم يتصل echo "failed connect" . $e->getMessage(); } ?> 1 اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 4 ساعات قال Ahmed Alhamdany: هل يوجد رد من اصحاب الاختصاص ؟؟؟ في البداية نقوم بالإتصال بقاعدة البيانات، ونبحث عن مستخدم يمتلك إسم مستخدم وكلمة سر مطابقة لما قمنا بإدخالها في فورم تسجيل الدخول. يقوم الكود التالي: $stmt = $con -> prepare("SELECT * from users WHERE username_users = ? AND password_users = ? limit 1"); $stmt->execute(array($user,$hashpass)); $row = $stmt->fetch(); $count = $stmt->rowcount(); بإعادة القيمة 1 في حالة كان هناك مستخدم يمتلك معلومات مطابقة للمعلومات المدخلة في الفورم. بإعادة القيمة صفر 0 في حالة لم يكن هناك أي مستخدم يمتلك معلومات مطابقة للمعلومات المدخلة في الفورم. الجزء الأول من الكود صحيح، أي الجزء الموجود داخل الشفرة التالية: if ($count > 0){ // باقي محتوى الكود } أما الجزء الثاني، فيجب تعويضه بهذا: } else { echo "error in password"; } لأنه في حالة لم يكن أي مستخدم يمتلك تلك المعلومات، ستكون قيمة $row مساوية للقيمة False، إذن لا يمكننا الحصول على إسم المستخدم من مستخدم غير موجود. 1 اقتباس
0 Ahmed Alhamdany نشر 14 أغسطس 2020 الكاتب أرسل تقرير نشر 14 أغسطس 2020 بتاريخ 35 دقائق مضت قال محمد ربيع زليول: في البداية نقوم بالإتصال بقاعدة البيانات، ونبحث عن مستخدم يمتلك إسم مستخدم وكلمة سر مطابقة لما قمنا بإدخالها في فورم تسجيل الدخول. يقوم الكود التالي: $stmt = $con -> prepare("SELECT * from users WHERE username_users = ? AND password_users = ? limit 1"); $stmt->execute(array($user,$hashpass)); $row = $stmt->fetch(); $count = $stmt->rowcount(); بإعادة القيمة 1 في حالة كان هناك مستخدم يمتلك معلومات مطابقة للمعلومات المدخلة في الفورم. بإعادة القيمة صفر 0 في حالة لم يكن هناك أي مستخدم يمتلك معلومات مطابقة للمعلومات المدخلة في الفورم. الجزء الأول من الكود صحيح، أي الجزء الموجود داخل الشفرة التالية: if ($count > 0){ // باقي محتوى الكود } أما الجزء الثاني، فيجب تعويضه بهذا: } else { echo "error in password"; } لأنه في حالة لم يكن أي مستخدم يمتلك تلك المعلومات، ستكون قيمة $row مساوية للقيمة False، إذن لا يمكننا الحصول على إسم المستخدم من مستخدم غير موجود. شكرا اخي على الاجابة في حالة أدخل المستخدم يوزر صحيح والباسوورد خطا كيف يتم كتابة الكود ؟ اقتباس
0 محمد ربيع زليول نشر 14 أغسطس 2020 أرسل تقرير نشر 14 أغسطس 2020 بتاريخ الآن قال Ahmed Alhamdany: في حالة أدخل المستخدم يوزر صحيح والباسوورد خطا كيف يتم كتابة الكود ؟ غالبًا لا نقوم بإخبار المستخدم أن إسم المستخدم صحيح وكلمة السر، أشياء متعلقة بالحماية، لكن إذا أردت القيام بها فالطريقة كالتالي: أولًا تقوم بالبحث عن مستخدم في قاعدة البيانات عن مستخدم لديه الإسم المدخل في فورم تسجيل الدخول هكذا مثلًا: $stmt = $con->prepare("SELECT * from users WHERE username_users = ? limit 1"); // قمت بالبحث بإسم المستخدم فقط $stmt->execute(array($user)); // قمت بالبحث بإسم المستخدم فقط $row = $stmt->fetch(); $count = $stmt->rowcount(); الكود التالي يرجع القيمة 1 إذا كان هناك مستخدم بهذا الإسم والقيمة 0 إذا لم يكون هناك إي مستخدم بهذا الإسم. إذن في حالة كانت القيمة 0 سنقوم بعرض رسالة الخطأ: if ($count == 0 ) { echo "Username is wrong"; } else { // باقي الكود } وفي حالة كانت قيمة count تساوي 1، سنقوم بالتحقق من أن كلمة السر التي أدخلها المستخدم مطابقة لكلمة السر في قاعدة البيانات، في حالة لم تكن مطابقة سنعرض رسالة خطأ في حالة كنت متطابقة نقوم بالإنتقال لصفحة admin.php أو index.php if ($count == 0 ) { echo "Username is wrong"; } else { if($hashpass != $row['password_users']) { echo "Password is wrong"; // نقوم بعرض رسالة الباسورد خاطئ } else { // نقوم بتسجيل الدخول والإنتقال للصفحات $_SESSION['username'] = $user ; $_SESSION['id'] = $row['id_users']; $_SESSION['types'] = $row['types_users']; if($_SESSION['types'] == 2 || $_SESSION['types'] == 3){ header('location: index.php'); } if($_SESSION['types'] == 0 || $_SESSION['types'] == 1){ header('location: admin.php'); } } } 1 اقتباس
السؤال
Ahmed Alhamdany
ما هو سبب ظهور الخطأ التالي : Notice: Trying to access array offset on value of type bool in
عند استعمال الكود التالي
13 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.