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

السؤال

نشر (معدل)

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

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

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

احاول تحويل ملف 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");
}

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

بالتوفيق.

  • 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...