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

مشكلة في الاستعلام Php و MySQLi في فورم تسجيل عضو جديد؟

Mohammed Aladimi

السؤال

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

واجهتني هذه المشكلة في كود 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...