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

السؤال

نشر

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

واجهتني هذه المشكلة في كود Php و MySQLi بخصوص التأكد من وجود إسم المستخدم والبريد الإلكتروني في قاعدة البيانات أو لا ، عند تسجيل عضو جديد.

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\cms3\include\registor.php on line 32


 

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\cms3\include\registor.php on line 34

لقد أرفقت لكما الملف أرجو أن تفحصوا الخطأ إن لكم وقت، فقد أتعبني البحث بدون جدوى

وشكرا لكم 

registor.php

Recommended Posts

  • 0
نشر

وعليكم السلام @Mohammed Aladimi.

طريقة استخدامك لدالة mysqli_num_rows صحيحة قي السطر 32 و 34 لكن يبدو ان الخطأ من كود الإستعلام في السطر 30 و 31 :

$sql_username = mysqli_query($conn,"SELECT 'username' FROM 'users' WHERE 'username' ='$username'");
$sql_email    = mysqli_query($conn,"SELECT 'email' FROM 'users' WHERE 'email' = '$email'");

قم بتعديل الإستعلام SELECT بجعل الاقتباس موجود في القيمة username$ و email$ فقط:

$sql_username = mysqli_query($conn,"SELECT username FROM users WHERE username ='$username'");
$sql_email    = mysqli_query($conn,"SELECT email FROM users WHERE email = '$email'");

و تأكد من صِحّة اسم الجدول users و القوائم username و email .

  • 0
نشر (معدل)

وعليكم السلام @Mohammed Aladimi

يبدو أن الخطاء في الكود الذي أرفقته هو في السطر 30 و 31 في كود الإستعلام من قاعدة البيانات

$sql_username = mysqli_query($conn,"SELECT 'username' FROM 'users' WHERE 'username' ='$username'");
$sql_email    = mysqli_query($conn,"SELECT 'email' FROM 'users' WHERE 'email' = '$email'");

أرى أن تقوم بتعديل الكود ليصبح بالشكل التالي

$sql_username = mysqli_query($conn,"SELECT * FROM users WHERE username ='{$username}'");

$sql_email    = mysqli_query($conn,"SELECT * FROM users WHERE email = '{$email}'");

كما يمكنك أيضًا التحقق من اسم المستخدم والبريد الإلكتروني بإستعلام واحد من خلال الكود التالي

$sql = mysqli_query($conn, "SELECT * FROM users WHERE ";
$sql .= "username = '{$username}'";
$sql .= "AND email = '{$email}'";
$sql .= "LIMIT 1");

ثم ارسال رسالة أن اسم المستخدم أو كلمة المرور خاطئة

تم التعديل في بواسطة Abdulhamid Hamsho
  • 0
نشر (معدل)
بتاريخ 7 ساعات قال Abdulhamid Hamsho:

وعليكم السلام @Mohammed Aladimi

يبدو أن الخطاء في الكود الذي أرفقته هو في السطر 30 و 31 في كود الإستعلام من قاعدة البيانات


$sql_username = mysqli_query($conn,"SELECT 'username' FROM 'users' WHERE 'username' ='$username'");
$sql_email    = mysqli_query($conn,"SELECT 'email' FROM 'users' WHERE 'email' = '$email'");

أرى أن تقوم بتعديل الكود ليصبح بالشكل التالي


$sql_username = mysqli_query($conn,"SELECT * FROM users WHERE username ='{$username}'");

$sql_email    = mysqli_query($conn,"SELECT * FROM users WHERE email = '{$email}'");

كما يمكنك أيضًا التحقق من اسم المستخدم والبريد الإلكتروني بإستعلام واحد من خلال الكود التالي


$sql = mysqli_query($conn, "SELECT * FROM users WHERE ";
$sql .= "username = '{$username}'";
$sql .= "AND email = '{$email}'";
$sql .= "LIMIT 1");

ثم ارسال رسالة أن اسم المستخدم أو كلمة المرور خاطئة

كما قال الأخ محمد أن الخطأ يوجد في السطر 30 و 31 أثناء كتابة الإستعلام واقتراحه الأول لحل المشكلة صحيح, لكن التاني به bug حرج والسبب هو أن الأخ @Aladimi يريد أن يتأكد إن ما كان ال user يحاول أن يتسجل بالموقع ب username و email موجود فعلا في قاعدة البيانات أم لا, وفي هده اللحظة AND operator غير صالح لأنه سيمنع user من التسجيل فقط إن أدخل username و email متشابهين لبيانات row واحدة في قاعدة البيانات ومنه الحل هو استعمال OR operator.

 

# only username field, because we will only count rows
$sql = mysqli_query($conn, "SELECT username FROM users WHERE "; 
$sql .= "username = '{$username}'";
# OR operator
$sql .= "OR email = '{$email}'";
$sql .= "LIMIT 1");

 

تم التعديل في بواسطة ayoubridouani

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...