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

خطأ في نظام تسجيل دخول بلغة php

Mohammed Aladimi

السؤال

السلام عليكم ورحمة الله وبركاتة 

ممكن مساعدة بعد إذنكم 

Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\post\admin\login.php on line 44

 

Снимок.PNG

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

Recommended Posts

  • 0

مرحبا محمد، 

السبب انك تستعمل الدالة mysqli_fetch_assoc في السطر 42 وهي تعيد النتائج على شكل associative array ومن ثم الخطأ سببه استعمال نمط مصفوفة مخالف لما يمكن للتابع in_array أن يمرر له (حيث يجب ان نمرر له array عادية)

الفرق array يكون دليل العنصر هو موقعه مثال 0,1,2,3 

مثال

$a = array(5,7,1);
$a[0] => 5
$a[1] => 7
$a[2] => 1

أما associative array يكون دليل العنصر هو سلسلة نصية "moh","hello","1" و هكذا..

مثال

$a = ["hello"=>"world"];

$a["hello"] // => world

لنصل للبيانات ضمن associative array كماالحال في الشيفرة لديك 

عليك وضع اسم الحقل مكان دليل العنصر

$row[$AdminMail];

هكذا

لنعرف سبب الخطأ نقوم بطباعة المتحولات التي لدينا و التأكد من قيمها فعليك طباعة المتحول  row لتفهم المشكلة بشكل أفضل..

لفهم افضل عن أنماط المصفوفات في php قم بالبحث في غوغل عن 

php array vs associative array

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

مرحباً @Mohammed Aladimi

السبب هنا هو أن دالة in_array تنتظر منك تمرير مُعاملين الأول هو العنصر الذي تريد البحث عنه و الثاني هو المصفوفة في حين أنه هنا لم يتم تمرير مصفوفة بل null و هذا يعني أن المتغير row يساوي null.

أنصحك دائماً بإستخدام ما يُسمى بال prepared statments و parameterized queries  للحماية من ثغرة sql injection و هذا سواء كنت تستخدم دوال ال mysqli أو PDO فمثلاً في حالة إستخدام  mysqli سيكون الكود مشابه للشكل التالي:

<?php

$stmt = $conn->prepare("SELECT id from admin where email = ? AND password = ?"); // prepare the query
$stmt->bind_param('ss', $adminMail, $adminPass);
$stmt->execute();
$stmt->bind_result($id);
if ($stmt->fetch()) {
  echo "success";
  $_SESSION['login_admin_id'] = $id; // save id in session
  // redirect to admin panel

} else {
  $error = "Email or Password is incorrect";
}

كما بإمكانك أيضاً إستخدام PDO

بالتوفيق.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...