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

مشكلة في اعداد Prepared statements

Marwan800

السؤال

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

تحيه طيبه للجميع.

لدي استفسار لو تكرمتو

احاول تحويل ملف php لحمايته الى  Prepared statements .

الملف الاصلي كالتالي وهو شغال 100%100 قبل التعديل:

<?php
include 'connt.php';
 
 $json = file_get_contents('php://input');
 $obj = json_decode($json,true);
 $Name = $obj['Name'];

 $loginQuery = "select * from Users where Name = '$Name' ";
 $check = mysqli_fetch_array(mysqli_query($con,$loginQuery));
if($check){
   
     $check['result'] = 'Login Matched';
     $SuccessMSG = json_encode($check);
     echo $SuccessMSG ; 
 }

 else{
    $InvalidMSG= array("result"=>"Invalid Username or Password Please Try Again");
    $InvalidMSGJSon = json_encode($InvalidMSG);
     echo $InvalidMSGJSon ;
 
 }
 
 mysqli_close($con);
?>

 

وهو مرتبط  ب كود الاستعلام في للغة flutter بشكل التالي:

Future CheckName() async {
    setState(() {
      visible = true;
    });
  //  var url = 'https://///////////////.php';
    var data = {'Name': nameController.text};
    var response = await http.post(url, body: json.encode(data));
    Map<String, dynamic> message = jsonDecode(response.body);
    if (message['result'] == 'Login Matched') {
      setState(() {
        visible = false;
      });
      Navigator.push(context, MaterialPageRoute(builder: (context) => Main()));

    } else {
      setState(() {
        visible = false;
      });
      _showMyDialog();

    }
  }

 

كما هو واضح في الكود اعلاه الي احاول اعمله هو التحقق في حالة كان الاسم متطبق وصار Login Matched المستخدم سوف ينتقل الى صفحة مختلفة وفي حالة كانت توجد مشكلة رح يشاهد رسالة منبثقة 

 

 

الان بعد تعديل الكود بشكل التالي :

<?php
include 'connt.php';
 
 $json = file_get_contents('php://input');
 $obj = json_decode($json,true);
 $Name = $obj['Name'];



$sql = "SELECT * FROM Users WHERE Name=?"; // SQL with parameters
$stmt = $con->prepare($sql); 
$stmt->bind_param("s", $Name);
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$user = $result->fetch_assoc(); // fetch data   

if($result){
     $check['result'] = 'Login Matched';
     $SuccessMSG = json_encode($check);
     echo $SuccessMSG ; 
 }

 else{
    $InvalidMSG= array("result"=>"Invalid Username or Password Please Try Again");
    $InvalidMSGJSon = json_encode($InvalidMSG);
     echo $InvalidMSGJSon ;
 
 }
 
 mysqli_close($con);
 

 
 
?>

اصبح ينتقل في كل الحالات يعني دائما يصير له Login Matched حتى ولو الاسم غلط 

 

احد يعرف حل هذا المشكله لو تكرمتو احاول تحويل الملف الاول الى  Prepared statements 

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

Recommended Posts

  • 1

مرحباً مروان،

السبب أن المتغير result عبارة عن كائن و عندما تقوم بفحص المتغير في الشرط:

<?php

if($result){
  // code
}

فإن الشرط مُحقق في كل الأحوال.

الحل هناك عدة طرق من بينها:

<?php

// here prev code

$stmt = $conn->prepare("SELECT * from users where name = ?"); // prepare the query
$stmt->bind_param('s', $name);
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
if ($result->num_rows > 0) {
  echo "success";
} else {
  die("Invalid Username or Password Please Try Again");
}

او 

<?php

// prev code

$stmt = $conn->prepare("SELECT * from users where name = ?"); // prepare the query
$stmt->bind_param('s', $name);
$stmt->execute();
if ($stmt->fetch()) {
  echo "success";
} else {
  die("Invalid Username or Password Please Try Again");
}

فالخطأ كله في الشرط.

بالتوفيق.

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

  • 1

مرحب 

هل قمت بتغير اسم الجدول على قاعد البيانات من users إلي user لأن الكود بعد التعديل يختلف عن الأول

$loginQuery = "select * from Users where Name = '$Name' ";

$sql = "SELECT * FROM user WHERE Name=?";

 

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

  • 1

مرحبا،

هل يمكنك عرض النتائح التي يعيدها استعلام SQL أي عمل echo للناتج result?

أرجو تجريب الاتصال من متصفح مثلا وسوف تُعرض النتائج على الشاشة، أرجو تزويدنا بها.

شكرا لك

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

  • 0
بتاريخ الآن قال zonasabri:

مرحب 

هل قمت بتغير اسم الجدول على قاعد البيانات من users إلي user لأن الكود بعد التعديل يختلف عن الأول


$loginQuery = "select * from Users where Name = '$Name' ";

$sql = "SELECT * FROM user WHERE Name=?";

 

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

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...