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

السؤال

نشر

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

اهلا ي اخوان ..

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

احتاج تطبيق الفكره على الكود التالي:

<?php

if ($_SERVER['REQUEST_METHOD']=='POST') 
{
    	include 'connt.php';
    $phone = $_POST['phone'];
    $password = $_POST['password'];

    
  $sql = "SELECT * FROM user WHERE phone='$phone' AND password='$password' ";
 
   $response = mysqli_query($con, $sql);
 
   $result = array();
 
   $result['login'] = array();
  
  
    if ( mysqli_num_rows($response) === 1 ) {
        
     
   $row = mysqli_fetch_assoc($response);

   

            
            $index['name'] = $row['name'];
           
 $index['phone'] = $row['phone'];
         
	 
        array_push($result['login'], $index);

   
         $result['success'] = "1";
        
    $result['message'] = "success";
        
    echo json_encode($result);

  
          mysqli_close($con);

      
    }

}

?>

 

 

<?php


$db_name = "XXXXX";
$mysql_username = "root";
$mysql_password = "";
$server_name = "localhost";
$con = mysqli_connect($server_name, $mysql_username, $mysql_password,$db_name);
 


if($con){
	
	echo"connection OK";
	
}
else{
	
echo	"conection not";
}

?>
  

 

 

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

Recommended Posts

  • 1
نشر

تحياتي أستاذ مروان

في الكود يوجد جملة SQL وحيدة وهي عرضة للSQL injection وهي:

$sql = "SELECT * FROM user WHERE phone='$phone' AND password='$password' ";

وهي عرضة للSQL injection بسبب المتغيرات $password و $phone.

لذلك عليك تجهيز هذه الجملة أولا عن طريق الprepared statements.

نقوم بتجهيز الجملة بوضع علامة إستفهام مكان المتغيرات كالآتي:

$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");

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

$stmt->bind_param("ss", $phone, $password);

إذا كان المتغير phone$ من النوع int يجب تغيير الparameter الأول إلى "is" وتصبح الجملة كالآتي:

$stmt->bind_param("is", $phone, $password);

بالتالي يكون الكود الكامل لتجهيز الجملة وتنفيذها هو:

$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$result $stmt->execute();

ويمكنك التعامل مع الresult المرجعة.

  • 0
نشر
بتاريخ 6 دقائق مضت قال مصطفى القباني:

تحياتي أستاذ مروان

في الكود يوجد جملة SQL وحيدة وهي عرضة للSQL injection وهي:


$sql = "SELECT * FROM user WHERE phone='$phone' AND password='$password' ";

وهي عرضة للSQL injection بسبب المتغيرات $password و $phone.

لذلك عليك تجهيز هذه الجملة أولا عن طريق الprepared statements.

نقوم بتجهيز الجملة بوضع علامة إستفهام مكان المتغيرات كالآتي:


$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");

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


$stmt->bind_param("ss", $phone, $password);

إذا كان المتغير phone$ من النوع int يجب تغيير الparameter الأول إلى "is" وتصبح الجملة كالآتي:


$stmt->bind_param("is", $phone, $password);

بالتالي يكون الكود الكامل لتجهيز الجملة وتنفيذها هو:


$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$result $stmt->execute();

ويمكنك التعامل مع الresult المرجعة.

اهلا بك اخي الكريم

في البداية ربي يعطيك الف صحه وعافيه عزيزي ويزيدك من واسع فضله من العلم باذن الله 

اول نقطة افهمك من كلامك ان كل المشكلة في هذا اول 3 اسطر الي فيها الاستعلام فقط اما باقي الملف لا يتغير شكله سوى كان josn او لا.

الان قمت بتطبيق ما ذكرته لي وظهر لي الخطا التالي 

( ! ) Parse error: syntax error, unexpected '$stmt' (T_VARIABLE) in C:\wamp64\www\login.php on line 10

ويمكنك التعامل مع الresult المرجعة ... بنسبة ل هذا الي فهمته رح يبقا شكل الكود على ما هو عليه صحيح ذلك؟

 

 

الكود كامل الان كالتالي:

 

<?php


    	include 'conn.php';
    $phone = $_POST['phone'];
    $password = $_POST['password'];

$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$result $stmt->execute();

   $response = mysqli_query($con , $sql);

   $result = array();

   $result['login'] = array();
  
if ( mysqli_num_rows($response) === 1 ) {
        
     
$row = mysqli_fetch_assoc($response);

             
$index['name'] = $row['name'];
           
 $index['phone'] = $row['phone'];
         
	 
        array_push($result['login'], $index);

   
         $result['success'] = "1";
        
    $result['message'] = "success";
        
    echo json_encode($result);

  
          mysqli_close($mysqli );

      
    }



?>

 

  • 0
نشر

العفو لا شكرا على واجب، بالنسبة للخطأ كان هناك خطأ في الكتابة جرب مرة أخرى:

$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$response =  $stmt->execute();

بالنسبة لتغير باقي الكود أم لا، أعتقد أنه لا يجب التغيير فيه، للتأكد من ذلك عليك مقارنة الreturn type للmysqli_query المستخدمة في الكود الأصلي، والmysqli_stmt::execute

  • 0
نشر (معدل)
بتاريخ 5 دقائق مضت قال مصطفى القباني:

العفو لا شكرا على واجب، بالنسبة للخطأ كان هناك خطأ في الكتابة جرب مرة أخرى:


$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$response =  $stmt->execute();

بالنسبة لتغير باقي الكود أم لا، أعتقد أنه لا يجب التغيير فيه، للتأكد من ذلك عليك مقارنة الreturn type للmysqli_query المستخدمة في الكود الأصلي، والmysqli_stmt::execute

 طيب عزيزي الحين عدلت الكود واصبح كالتالي:

<?php


    	include 'conn.php';
    $phone = $_POST['phone'];
    $password = $_POST['password'];

$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$response =  $stmt->execute();

   $response = mysqli_query($con , $sql);

   $result = array();

   $result['login'] = array();
  
if ( mysqli_num_rows($response) === 1 ) {
        
     
$row = mysqli_fetch_assoc($response);

             
$index['name'] = $row['name'];
           
 $index['phone'] = $row['phone'];
         
	 
        array_push($result['login'], $index);

   
         $result['success'] = "1";
        
    $result['message'] = "success";
        
    echo json_encode($result);

  
          mysqli_close($mysqli );

      
    }



?>

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

 

المشكلة كالتالي:

eee.png.62588e71e8b6e87cc267e24ff4651637.png

قمت بوضعها كصوره عشان تكون اوضح

 

 

بتاريخ 30 دقائق مضت قال مصطفى القباني:

العفو لا شكرا على واجب، بالنسبة للخطأ كان هناك خطأ في الكتابة جرب مرة أخرى:


$stmt = $mysqli->prepare("SELECT * FROM user WHERE phone=? AND password=?");
$stmt->bind_param("ss", $phone, $password);
$response =  $stmt->execute();

بالنسبة لتغير باقي الكود أم لا، أعتقد أنه لا يجب التغيير فيه، للتأكد من ذلك عليك مقارنة الreturn type للmysqli_query المستخدمة في الكود الأصلي، والmysqli_stmt::execute

صار معي ربي يعطيك العافيه اخي تسلم 

تم التعديل في بواسطة مروان مروان3

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...